[英]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.