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 回答