Search code examples
androidslideshowoncreate

How to get current image when rotating device


I have a simple slideshow that image changes by clicking. When I rotate device, oncreate function resets slideshow and it start from image0. How to get current image?

It's my cod:

 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]);
        }
    });

}

Solution

  • Your solution

    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]);
    }