0

これに関するいくつかの質問を見つけましたが、onSavedInstanceStateメソッドとonRestoreInstanceStateメソッドを正しく使用する必要があるようです。

私のアプリケーションはカードの配列を作成し、グリッドビューに表示します。各グリッドにはテキストビューが含まれています。

アプリ内で、カードを追加した後。メニューボタンを使用してアプリケーションを終了すると、戻ってきた後、すべてが正常に再開されます。ただし、向きを変更すると、すべての「テーブル」がリセットされます。すべてのカードを再度追加する必要があります。

では、なぜアプリの終了と再入力ではなく、画面の向きの変更に関する情報を失うのですか?どうすれば修正できますか?

言及された方法はこれだけを持っています:

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);  
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);

}

私のonCreateメソッドは次のように始まります。

super.onCreate(savedInstanceState);
4

2 に答える 2

1

デバイスの向きを変更すると、アクティビティ全体が再作成されます。onCreate()をもう一度呼び出します。一方、ホームボタンを使用すると、アクティビティは一時停止され(onPause())、再び表示されると、onResume()メソッドを介して入力されます。したがって、onCreate()で行われたことはすべて保持されます。

http://developer.android.com/reference/android/app/Activity.html

これはおそらくあなたが探しているものだと思います

http://developer.android.com/guide/topics/resources/runtime-changes.html

于 2012-08-09T14:21:39.750 に答える
0

ここに多重解像度サンプルアプリケーションのコードを置きます

public final class MultiRes extends Activity {

private int mCurrentPhotoIndex = 0;
private int[] mPhotoIds = new int[] { R.drawable.sample_0,
        R.drawable.sample_1, R.drawable.sample_2, R.drawable.sample_3,
        R.drawable.sample_4, R.drawable.sample_5, R.drawable.sample_6,
        R.drawable.sample_7 };

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    showPhoto(mCurrentPhotoIndex);

    // Handle clicks on the 'Next' button.
    Button nextButton = (Button) findViewById(R.id.next_button);
    nextButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            mCurrentPhotoIndex = (mCurrentPhotoIndex + 1)
                    % mPhotoIds.length;
            showPhoto(mCurrentPhotoIndex);
        }
    });
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    outState.putInt("photo_index", mCurrentPhotoIndex);
    super.onSaveInstanceState(outState);
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    mCurrentPhotoIndex = savedInstanceState.getInt("photo_index");
    showPhoto(mCurrentPhotoIndex);
    super.onRestoreInstanceState(savedInstanceState);
}

private void showPhoto(int photoIndex) {
    ImageView imageView = (ImageView) findViewById(R.id.image_view);
    imageView.setImageResource(mPhotoIds[photoIndex]);

    TextView statusText = (TextView) findViewById(R.id.status_text);
    statusText.setText(String.format("%d/%d", photoIndex + 1,
            mPhotoIds.length));
}

}

于 2012-08-09T14:14:49.903 に答える