在我的应用中,我需要在用户注册时捕获多个数据。为了避免将多个EditText打包到一个布局中,我决定在一个活动中使用多个布局。一个布局将捕获电子邮件,另一个电话号码等。当我在一个布局中将数据输入到EditText时,一个按钮将我带到下一个。我所做的(作为测试)是这样的:
SignupActivity
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
现在我觉得这不是最好的方法。首先,如果我想从每个布局中捕获不同的数据类型,该怎么办?
想到了{p>List<Object> myData
,然后是什么?我可以用什么方法来实现这个目标?如果我保持原样,除了我提到的明显的数据类型之外,我将来会遇到哪些问题?
答案 0 :(得分:0)
如果您想将注册页面拆分为多个子页面,那么我会推荐片段。
例如,如果您在一次注册中有3个部分,那么可以在viewpager中添加三个片段以获得更好的用户体验
所有数据都可以使用接口b / w片段和活动
直接通过Activity访问答案 1 :(得分:0)
您可以将第一个活动中的所有数据放入捆绑包中,然后将捆绑包放入意图附加内容中,在第二个活动中获取捆绑包添加新数据并再次执行所有操作。
Bundle bundle = new Bundle();
bundle.putString("Name", "full name");
...
intent.putExtras(bundle);
在第二个活动中使用intent.getExtras()来获取数据
答案 2 :(得分:0)
将数据存储在列表中的原因是什么?在这种情况下,只需直接写入您的数据对象MyObject
,但请考虑更精确地命名。
如果您需要存储多个电话号码或电子邮件值。考虑将列表添加到MyObject`数据结构中。