【发布时间】:2019-11-28 23:39:37
【问题描述】:
情况是我想创建一个应用程序,它应该能够在每次单击按钮时在 LinearLayout 中创建一个新的 TextView。来自 EditText 的文本分配给所述 TextView。我设法做到了。但是,一旦应用程序关闭并重新启动,我一直在努力保存所有创建的 TextView。我尝试使用 OnSaveInstanceState 和 OnRestoreInstance 状态来保存一个数组,我将在 TextView 上显示的每个文本都保存到该数组中。恢复后,我将检查数组列表的大小并为数组列表中的每个值创建一个 TextView,以便全部恢复。但是,它不起作用。我知道,这些名称已保存到 arraylist,但是,当我重新启动应用程序时,什么都没有恢复。这是我的代码:
public class MainActivity extends AppCompatActivity{
private ArrayList<String> SubjectArray = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button savebtn = findViewById(R.id.MAINsave);
EditText newname = findViewById(R.id.newname);
CheckBox promo = findViewById(R.id.MAINpromo);
LinearLayout linearlayout = findViewById(R.id.MAINln);
savebtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
newsub();
}
});
}
private void newsub(){
EditText newname = findViewById(R.id.newname);
CheckBox promo = findViewById(R.id.MAINpromo);
LinearLayout MAINln = findViewById(R.id.MAINln);
SubjectArray.add(newname.getText().toString());
Toast.makeText(MainActivity.this, "Added To Array", Toast.LENGTH_SHORT).show();
RelativeLayout.LayoutParams Params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 200);
Params.setMargins(0, 10, 0, 10);
TextView newsubject = new TextView(MainActivity.this);
newsubject.setText(newname.getText().toString());
newsubject.setGravity(View.TEXT_ALIGNMENT_CENTER);
newsubject.setBackgroundColor(GRAY);
newsubject.setLayoutParams(Params);
MAINln.addView(newsubject);
}
@Override
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
SubjectArray = savedInstanceState.getStringArrayList("KEY_SUBJECTARRAY");
LinearLayout MAINln = findViewById(R.id.MAINln);
int subjectcount = SubjectArray.size();
for (int i = 0; i <= subjectcount; i++) {
RelativeLayout.LayoutParams Params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 200);
Params.setMargins(0, 10, 0, 10);
TextView restoredsubject = new TextView(MainActivity.this);
restoredsubject.setText(SubjectArray.get(i));
restoredsubject.setGravity(View.TEXT_ALIGNMENT_CENTER);
restoredsubject.setBackgroundColor(GRAY);
restoredsubject.setLayoutParams(Params);
MAINln.addView(restoredsubject);
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putStringArrayList("KEY_SUBJECTARRAY", SubjectArray);
}
}
【问题讨论】:
-
确认恢复数组的大小
-
尝试在 onCreate 中恢复
标签: java android android-savedstate