旋转设备时如何获取当前图像

How to get current image when rotating device

我有一个简单的幻灯片,可以通过单击更改图像。当我旋转设备时,oncreate 函数会重置幻灯片并从 image0 开始。如何获取当前图像?

这是我的鳕鱼:

 private int currentImage = 0;
private int numImages = 5;
int[] imageList = { R.drawable.pic1, R.drawable.pic2, R.drawable.pic3, R.drawable.pic4, R.drawable.pic5};
@Override
protected void onCreate(Bundle savedInstanceState) {
    currentImage = savedInstanceState.getInt("currentImage");
    savedInstanceState.getBundle()
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final ImageView image = (ImageView) findViewById(R.id.imageView);
    image.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
          currentImage++;
            currentImage = currentImage % numImages;
            image.setImageResource(imageList[currentImage]);
        }
    });

}

使用 onSaveInstanceState 将您的计数器保存到 Bundle。该包实例将被推送到 onCreate 方法。

// This will save state.
@ Override
onSaveInstanceState(Bundle bun){
super.onSaveInstanceState(bun);
bun.putInt("pos",currentImage);
}



//To restore state 
@Override
OnRestoreInstaneState(Bundle bun){
currentImage = bun.getInt("pos");
// set current image as pos in adapter
}

你的解决方案

private int currentImage = 0;
private int numImages = 5;
int[] imageList = { R.drawable.pic1, R.drawable.pic2, R.drawable.pic3, R.drawable.pic4, R.drawable.pic5};
ImageView image;
private static final String IMAGE_COUNTER_KEY = "image_counter_key";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    image = (ImageView) findViewById(R.id.imageView);
    if (savedInstanceState != null) {
        currentImage = savedInstanceState.getInt(IMAGE_COUNTER_KEY);
        setCurrentImage(currentImage);
    }
    image.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            currentImage++;
            setCurrentImage(currentImage);
        }
    });

}
//In your activity override the onSavedInstanceState()
@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
        outState.putInt(IMAGE_COUNTER_KEY, currentImage);
    }
}

//This is a helper method for setting the image based on your code
private void setCurrentImage(int imageNumber) {
        currentImage = currentImage % numImages;
        image.setImageResource(imageList[currentImage]);
}