简体   繁体   中英

how to save state of an activity

I have an activity like below. In this activity I have more than 10 images. Images change with next and back buttons. I want to save the state of this activity. For example , if I am at 5th image and I closed the activity or app. Now when I start the activity or app then it starts from the 1st image, not from the 5th image. It should start from the 5th image where I have left it. Kindly help me with code or edit my code.

 int[] images = { R.drawable.r1, R.drawable.r2, R.drawable.r3, R.drawable.r4, R.drawable.r5, R.drawable.r6, R.drawable.r7, R.drawable.r8, R.drawable.r9, R.drawable.r10 /// so on}; 
   public void onCreate(Bundle savedInstanceState) { 
   super.onCreate(savedInstanceState);
      setContentView(R.layout.main); 

    hImageViewPic = (ImageView)findViewById(R.id.idImageViewPic); 
     iButton = (Button) findViewById(R.id.bNext); 
     gButton = (Button) findViewById(R.id.bPrev);
      //Just set one Click listener for the image 
    iButton.setOnClickListener(iButtonChangeImageListener); 
    gButton.setOnClickListener(gButtonChangeImageListener);
    } 
     View.OnClickListener iButtonChangeImageListener = new OnClickListener() { 
      public void onClick(View v) {
   //Increase Counter to move to next Image 
      currentImage++;
      currentImage = currentImage % images.length;
      hImageViewPic.setImageResource(images[currentImage]);
      }
     }; 
  View.OnClickListener gButtonChangeImageListener = new OnClickListener() { 
    public void onClick(View v) {
     //Increase Counter to move to next Image 
    currentImage--; 
    currentImage = (currentImage + images.length) % images.length; 
     hImageViewPic.setImageResource(images[currentImage]);
    }
     };

Kindly suggest with code.

Try to use SharedPreferences to store your last image position.

    private ImageView hImageViewPic;
    private Button iButton;
    private Button gButton;

    private SharedPreferences sharedPreferences;

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

        hImageViewPic = (ImageView) findViewById(R.id.idImageViewPic);
        iButton = (Button) findViewById(R.id.bNext);
        gButton = (Button) findViewById(R.id.bPrev);

        sharedPreferences = getSharedPreferences(getString(R.string.app_name), MODE_PRIVATE);

        hImageViewPic.setImageResource(images[sharedPreferences.getInt("LastSeenImagePosition", 0)]);
        //Just set one Click listener for the image
        iButton.setOnClickListener(iButtonChangeImageListener);
        gButton.setOnClickListener(gButtonChangeImageListener);
    }
    View.OnClickListener iButtonChangeImageListener = new OnClickListener() {
        public void onClick(View v) {
            //Increase Counter to move to next Image
            currentImage++;
            currentImage = currentImage % images.length;
            hImageViewPic.setImageResource(images[currentImage]);
            SharedPreferences.Editor editor = sharedPreferences.edit();
            editor.putBoolean("LastSeenImagePosition", currentImage);
            editor.commit();
        }
    };
    View.OnClickListener gButtonChangeImageListener = new OnClickListener() {
        public void onClick(View v) {
            //Increase Counter to move to next Image
            currentImage--;
            currentImage = (currentImage + images.length) % images.length;
            hImageViewPic.setImageResource(images[currentImage]);
            SharedPreferences.Editor editor = sharedPreferences.edit();
            editor.putBoolean("LastSeenImagePosition", currentImage);
            editor.commit();
        }
    };
 int currentImage;
   int[] images = { R.drawable.r1, R.drawable.r2, R.drawable.r3, R.drawable.r4, R.drawable.r5,   R.drawable.r6, R.drawable.r7, R.drawable.r8, R.drawable.r9, R.drawable.r10 /// so on}; 
   public void onCreate(Bundle savedInstanceState) { 
   super.onCreate(savedInstanceState);
      setContentView(R.layout.main); 

   SharedPreferences settings = this.getSharedPreferences("imageNumber", 0);
   if(settings != null){
           currentImage= settings .getInt("lastImage", 0);
    }
    hImageViewPic = (ImageView)findViewById(R.id.idImageViewPic); 
     iButton = (Button) findViewById(R.id.bNext); 
     gButton = (Button) findViewById(R.id.bPrev);
      //Just set one Click listener for the image 
    iButton.setOnClickListener(iButtonChangeImageListener); 
    gButton.setOnClickListener(gButtonChangeImageListener);
    } 
     View.OnClickListener iButtonChangeImageListener = new OnClickListener() { 
      public void onClick(View v) {
   //Increase Counter to move to next Image 
      currentImage++;
      currentImage = currentImage % images.length;
      hImageViewPic.setImageResource(images[currentImage]);
      }
     }; 
  View.OnClickListener gButtonChangeImageListener = new OnClickListener() { 
    public void onClick(View v) {
     //Increase Counter to move to next Image 
    currentImage--; 
    currentImage = (currentImage + images.length) % images.length; 
     hImageViewPic.setImageResource(images[currentImage]);
    }
     };

at the onPause method:

@Override
protected void onPause(){
    super.onPause();
    SharedPreferences settings = getSharedPreferences("imageNumber", 0);
    SharedPreferences.Editor editor = settings.edit();
    editor.putInt("lastImage",currentImage  );
    editor.commit();
}

The suggestions above may work but the way to do it is using the activity's - onSaveInstanceState and onRestoreInstanceState. You can look at the example in: Saving Android Activity state using Save Instance State

Or read in the android's manual : http://developer.android.com/reference/android/app/Activity.html#onSaveInstanceState(android.os.Bundle)

The main advantage is that the values are saved only when really needed.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM