首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >onSaveInstanceState不工作

onSaveInstanceState不工作
EN

Stack Overflow用户
提问于 2012-05-30 17:04:48
回答 3查看 6.2K关注 0票数 1

我知道这个问题已经被问了很多,但我不明白为什么onSaveInstanceState不适合我。这可能是一些愚蠢的事情,但我希望你们中的一些人能在这里帮助我..不管怎样,这是我的代码:

代码语言:javascript
复制
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;
}

}

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-30 17:15:55

代码语言:javascript
复制
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;
}

希望这能对你有所帮助。振动

票数 0
EN

Stack Overflow用户

发布于 2012-05-30 17:07:19

为什么要将其保存在本地变量中?可以试试这个

代码语言:javascript
复制
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    this.ToDo = savedInstanceState.getStringArrayList("MyArrayList");
}

通常您可以在onCreate中恢复您的状态。也可以在onRestoreInstanceState中恢复它,但不是很常见。(onRestoreInstanceState在onStart之后调用,而onCreate在onStart之前调用。

来自:onSaveInstanceState () and onRestoreInstanceState ()

票数 0
EN

Stack Overflow用户

发布于 2012-05-30 17:10:36

您在"onRestoreInstanceState()“回调中提取保存的值,但实际上并没有对它们做任何操作。

代码语言:javascript
复制
ArrayList<String> ToDo = savedInstanceState.getStringArrayList("MyArrayList");

您需要将这些值包装在适配器中,并将其分配给列表,就像在onCreate()末尾所做的那样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10813142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档