繁体   English   中英

在一项活动中从多种布局捕获数据

[英]Capture data from multiple layouts in one activity

在我的应用中,我需要在用户注册时从用户捕获多个数据。 为了避免将多个EditText打包到一个布局中,我决定在一个活动中使用多个布局。 一种布局将捕获电子邮件,另一种将捕获电话等等。 当我在一种布局中将数据输入EditText时,一个按钮将我带到下一个布局。 我所做的(作为测试)是这样的:

注册活动

public class SignupActivity extends AppCompatActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_signup);

    final List<String> myData = new ArrayList<>();
    final EditText displayNameEditText = (EditText) findViewById(R.id.displayNameEditText);

    Button mainNextButton = (Button) findViewById(R.id.nextButtonMain);
    mainNextButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            myData.add(displayNameEditText.getText().toString());
            setContentView(R.layout.phone_numbers_capture);
            final EditText phone1EditText = (EditText) findViewById(R.id.phone1EditText);
            Button phoneNextButton = (Button) findViewById(R.id.phoneNumbersUINextButton);
            phoneNextButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    myData.add(phone1EditText.getText().toString());
                    Log.e("TAG IT", "Full name : " + myData.get(0));
                    Log.e("TAG IT", "Phone 1 : " + myData.get(1));
                }
            });

        }
    });
}
}

我得到的输出是这个(LogCat)

在此处输入图片说明

然后,当我到达最后一个布局时,可以像这样从myData传递此信息:

MyObject myObject = new MyObject();
myObject.setFullName(myData.get(0)) //Method expects a String, no issues
myObject.setPhoneNumberOne(myData.get(1)) //Method expects a string, no issues

现在我觉得这不是最好的方法。 首先,如果要从每个布局捕获不同的数据类型怎么办?

List<Object> myData想到了List<Object> myData ,然后呢? 我可以使用其他什么方法来实现这一目标? 如果我保持现状,那么除了我提到的明显的数据类型之外,将来还会遇到什么问题?

如果您想将注册页面分为多个子页面,那么我建议使用片段

例如,如果您在一个注册中包含3个部分,则可以在viewpager中添加三个片段以获得更好的用户体验

使用接口黑白片段和活动可以通过活动直接访问所有数据

您可以将第一个活动中的所有数据放入捆绑中,然后将其放入intent的附加中,在第二个活动中,获取捆绑中添加新数据并再次执行所有操作。

Bundle bundle = new Bundle();
bundle.putString("Name", "full name");
...
intent.putExtras(bundle);

在第二个活动中,使用intent.getExtras()获取数据

将数据存储在列表中的原因是什么? 在这种情况下,只需直接写入数据对象MyObject ,但可以考虑更精确地命名它。

如果您需要存储多个电话号码或电子邮件值。 考虑将列表添加到MyObject`数据结构中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM