1

この質問がすでに多く寄せられていることは知っていますが、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;
}

}

4

3 に答える 3

0

「onRestoreInstanceState()」コールバックで保存された値を抽出していますが、実際には何もしていません。

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

onCreate()の最後で行うように、これらの値をアダプターでラップしてリストに割り当てる必要があります。

于 2012-05-30T09:10:35.507 に答える
0

それをローカル変数に保存しているのはなぜですか?これを試すかもしれません

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

通常、onCreate で状態を復元します。onRestoreInstanceState で復元することも可能ですが、あまり一般的ではありません。(onRestoreInstanceState は onStart の後に呼び出されますが、onCreate は onStart の前に呼び出されます。

from : onSaveInstanceState () および onRestoreInstanceState ()

于 2012-05-30T09:07:18.603 に答える
0
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-30T09:15:54.903 に答える