我知道这个问题已经被问了很多,但我不明白为什么onSaveInstanceState不适合我。这可能是一些愚蠢的事情,但我希望你们中的一些人能在这里帮助我..不管怎样,这是我的代码:
public class Main extends Activity implements OnClickListener, OnKeyListener {
EditText textitem;
Button buttonadd;
ListView listitems;
ArrayList<String> ToDo;
ArrayAdapter<String> AA;
ArrayList<String> MyArrayList;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textitem = (EditText) findViewById(R.id.textitem);
buttonadd = (Button) findViewById(R.id.buttonadd);
listitems = (ListView) findViewById(R.id.listitems);
buttonadd.setOnClickListener(this);
textitem.setOnKeyListener(this);
ToDo = new ArrayList<String>();
AA = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, ToDo);
listitems.setAdapter(AA);
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putStringArrayList("MyArrayList", ToDo);
super.onSaveInstanceState(savedInstanceState);
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
ArrayList<String> ToDo = savedInstanceState.getStringArrayList("MyArrayList");
}
private void addItem(String item) {
if (item.length() > 0) {
this.ToDo.add(item);
this.AA.notifyDataSetChanged();
this.textitem.setText("");
}
}
public void onClick(View v) {
if (v == this.buttonadd) {
this.addItem(this.textitem.getText().toString());
}
}
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN
&& keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
this.addItem(this.textitem.getText().toString());
}
return false;
}}
发布于 2012-05-30 17:15:55
public class Main extends Activity implements OnClickListener, OnKeyListener {
EditText textitem;
Button buttonadd;
ListView listitems;
ArrayList<String> ToDo;
ArrayAdapter<String> AA;
ArrayList<String> MyArrayList;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textitem = (EditText) findViewById(R.id.textitem);
buttonadd = (Button) findViewById(R.id.buttonadd);
listitems = (ListView) findViewById(R.id.listitems);
buttonadd.setOnClickListener(this);
textitem.setOnKeyListener(this);
if(savedInstanceState!=null)
{
ToDo = savedInstanceState.getStringArrayList("MyArrayList");
}
else
{
ToDo = new ArrayList<String>();
}
AA = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, ToDo);
listitems.setAdapter(AA);
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putStringArrayList("MyArrayList", ToDo);
super.onSaveInstanceState(savedInstanceState);
}
private void addItem(String item) {
if (item.length() > 0) {
this.ToDo.add(item);
this.AA.notifyDataSetChanged();
this.textitem.setText("");
}
}
public void onClick(View v) {
if (v == this.buttonadd) {
this.addItem(this.textitem.getText().toString());
}
}
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN
&& keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
this.addItem(this.textitem.getText().toString());
}
return false;
}希望这能对你有所帮助。振动
发布于 2012-05-30 17:07:19
为什么要将其保存在本地变量中?可以试试这个
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
this.ToDo = savedInstanceState.getStringArrayList("MyArrayList");
}通常您可以在onCreate中恢复您的状态。也可以在onRestoreInstanceState中恢复它,但不是很常见。(onRestoreInstanceState在onStart之后调用,而onCreate在onStart之前调用。
发布于 2012-05-30 17:10:36
您在"onRestoreInstanceState()“回调中提取保存的值,但实际上并没有对它们做任何操作。
ArrayList<String> ToDo = savedInstanceState.getStringArrayList("MyArrayList");您需要将这些值包装在适配器中,并将其分配给列表,就像在onCreate()末尾所做的那样。
https://stackoverflow.com/questions/10813142
复制相似问题