onSaveInstanceState not working

前端 未结 3 982
轮回少年
轮回少年 2021-01-07 09:16

I know this question has already been asked a lot, but I don\'t get why onSaveInstanceState isn\'t working for me. It\'s probably something stupid, but I hope some of you ca

相关标签:
3条回答
  • 2021-01-07 09:19
    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;
    }
    

    Hope this will help you. Vipul

    0 讨论(0)
  • 2021-01-07 09:27

    you are saving that in the local variable why ? may try this

    @Override
    public void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        this.ToDo = savedInstanceState.getStringArrayList("MyArrayList");
    }
    

    Usually you restore your state in onCreate. It is possible to restore it in onRestoreInstanceState as well, but not very common. (onRestoreInstanceState is called after onStart, whereas onCreate is called before onStart.

    from : onSaveInstanceState () and onRestoreInstanceState ()

    0 讨论(0)
  • 2021-01-07 09:27

    You're extracting the saved values in the "onRestoreInstanceState()" callback, but you don't actually do anything with them.

    ArrayList<String> ToDo = savedInstanceState.getStringArrayList("MyArrayList");
    

    You need to wrap these values in an adapter and assign it to the list, like you do it in the end of onCreate().

    0 讨论(0)
提交回复
热议问题