在表单的输入页面之间导航时丢失输入数据



在我的Android应用程序中,我创建了三个活动。每个页面都包含一些输入字段和"下一页"按钮;除了最后一个按钮,它负责提交。我的问题是,当用户填写所有的输入和点击提交按钮之前,如果他想回去使用手机默认的集成返回按钮,然后在检查第一页后,当他点击"下一步按钮";为了转到第二页,第二页的输入消失了。(因为你知道活动将重新启动,所以所有输入数据将被删除)

有保存数据的方法吗?

当从第一页跳转到第三页时,我使用:

保存了它
Intent intent = new Intent(CreateViolationPageOne.this,CreateViolationPageTwo.class);
String allData = inputStreet.getText().toString()+","+inputVehicle.getText().toString()+","+inputBrand.getText().toString()+
inputColor.getText().toString()+","+inputNumber.getText().toString();
intent.putExtra(CreateViolationPageTwo.ALL_DATA, allData);
startActivity(intent);

注意:

我没有使用

finish() 

StartActivity(intent)

此外,我确实使用了onSaveInstanceState在我的代码,但问题仍然发生:

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
if(!inputStreet.getText().toString().isEmpty())
savedInstanceState.putString("inputStreet", inputStreet.getText().toString());
if(!inputVehicle.getText().toString().isEmpty())
savedInstanceState.putString("inputVehicle", inputVehicle.getText().toString());
if(!inputBrand.getText().toString().isEmpty())
savedInstanceState.putString("inputBrand", inputBrand.getText().toString());
if(!inputColor.getText().toString().isEmpty())
savedInstanceState.putString("inputColor", inputColor.getText().toString());
if(!inputNumber.getText().toString().isEmpty())
savedInstanceState.putInt("inputNumber", Integer.parseInt(inputNumber.getText().toString()));
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onPause() {
super.onPause();
}
然后在onCreate方法1:
if (savedInstanceState != null) {
if(savedInstanceState.containsKey("inputStreet"))
inputStreet.setText(savedInstanceState.getString("inputStreet"));
if(savedInstanceState.containsKey("inputVehicle"))
inputVehicle.setText(savedInstanceState.getString("inputVehicle"));
if(savedInstanceState.containsKey("inputBrand"))
inputBrand.setText(savedInstanceState.getString("inputBrand"));
if(savedInstanceState.containsKey("inputColor"))
inputColor.setText(savedInstanceState.getString("inputColor"));
if(savedInstanceState.containsKey("inputNumber"))
inputNumber.setText(Integer.toString(savedInstanceState.getInt("inputNumber")));
}

这是我第一个android应用程序,我是android Studio的新手。

我找到了问题的答案。我发现创建一个带有与输入的数据类型相对应的字段的类是最有效的方法。作为一个例子,我在我的活动中输入了street,因此我在我的类中创建了一个私有String street字段来保留输入的数据。

我的类是这样的:

public class AllViolationData implements Serializable {
private static AllViolationData violationData;
private String numberOne;
private String numberTwo;
private String inputStreet;
private String inputVehicle;
//the rest of my data fields 
}

但诀窍是在其中创建该类的静态实例,并为其提供getter和setter

public static void setViolationData(AllViolationData violationData) {
AllViolationData.violationData = violationData;
}
public static AllViolationData getViolationData() {
if(violationData==null){
violationData = new AllViolationData();
}
return violationData;
}

现在,当用户单击next按钮移动到下一页时,我使用getVioationData来保存其中的数据,然后在保存数据后启动后续活动。

最后,我在每个激活中使用相同的对象,通过将我的代码放在onCreate函数中,并且我不必担心静态概念,因为对象将在第一次启动激活时为null,因为我总是在提交数据时将其设置为null。

这可能不是理想的解决方案,但它完成了工作。