旋转设备时如何获取当前图像
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]);
}
我有一个简单的幻灯片,可以通过单击更改图像。当我旋转设备时,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]);
}