Как использовать сохраненное состояние экземпляра и восстановить состояние экземпляра с помощью спиннеров в Android?

1

У меня есть spinner в моей деятельности со списком опций,

Когда пользователь выбирает параметр, я использовал адаптер OnItemSelected, чтобы получить значение позиции для выбранного параметра, и внутри этого я добавил некоторые If Else Statementments. Оператор If фактически генерирует случайную строку из предопределенной базы данных и отображает в TextView.

Теперь я вернусь к другому действию и снова вернусь к этой деятельности. Теперь проблема в том, что по умолчанию выбрана только первая опция счетчика, мне нужно обновить последнюю выбранную опцию пользователя, и когда действие снова начнет работать с функциями функции.

Я также выполнил некоторые поиски и обнаружил, что это можно сделать, используя onSaveInstanceState и onRestoreInstanceState:

  • Как использовать эти два и где я должен их помещать, внутри onItemSelected (адаптер) или снаружи?
  • Как обновить (или сохранить) новое значение позиции, выбранное пользователем, в произвольный сгенерированный код?

Для ясности, пожалуйста, проверьте мой код:

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout_scheduledactivity);

    /**displayed when the activity is launched (this should be 
    updated with the user selected option)**/
    Resources res = getResources();
    myString = res.getStringArray(R.array.normal); 
    String q = myString[rgenerator.nextInt(myString.length)];
    TextView tv = (TextView) findViewById(R.id.text1);
    tv.setText(q);

    //initiating the spinner
      Spinner s = (Spinner) findViewById( R.id.spinner);
      s.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){
            @Override
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
 if (pos == 1){

     //displayed on the time when user selects the option
     Resources res = getResources();
     myString = res.getStringArray(R.array.hardships); 
     String q = myString[rgenerator.nextInt(myString.length)];
     TextView tv = (TextView) findViewById(R.id.text1);
     tv.setText(q);

     }

else {
    //do nothing
     }

ВОПРОС:

Я отредактировал вопрос для большей ясности. В основном, что я пытаюсь сделать, я хочу сохранить позицию, выбранную пользователем, с помощью счетчика. Когда пользователь нажимает Button "Спасибо", действие завершится и начнется через несколько минут, вызванное приемником широковещательной передачи из другого класса. Когда действие начинается снова, последний выбранный вариант (предыдущая активность) пользователя должен быть по умолчанию в этом действии.

Я думаю, что если вы посмотрите на код, проблема в сохранении и восстановлении состояния экземпляра.

Пожалуйста, посмотрите мой код:

import java.util.Random;
import android.app.Activity;
import android.content.res.Resources;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

public class MyScheduledActivity extends Activity {

    private String[] myString;
    private static final Random rgenerator = new Random();
    protected int mPos;
  protected String mSelection;
  String situation[] = {"Normal","Hardship","Sadness","Exam"};

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout_scheduledactivity);


    if (mPos == 0) {
    Resources res = getResources();
    myString = res.getStringArray(R.array.normal); 
    String q = myString[rgenerator.nextInt(myString.length)];
    TextView tv = (TextView) findViewById(R.id.text1);
    tv.setText(q);
    }

        //selection of the spinner
        Spinner s = (Spinner) findViewById( R.id.spinner);

        // Application of the Array to the Spinner
            ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this,   android.R.layout.simple_spinner_item, situation);
            spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            s.setAdapter(spinnerArrayAdapter);

            s.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){

                @Override
                public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {

                    MyScheduledActivity.this.mPos = pos;
                    MyScheduledActivity.this.mSelection = parent.getItemAtPosition(pos).toString();

                    //display toast                     
                    Toast.makeText(parent.getContext(), "The Situation is " +
                    parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();

                    if (mPos == 0){

                        Resources res = getResources();
                        myString = res.getStringArray(R.array.hardships); 
                        String q = myString[rgenerator.nextInt(myString.length)];
                        TextView tv = (TextView) findViewById(R.id.text1);
                        tv.setText(q);

                    }

                    if (mPos == 1){

                        Resources res = getResources();
                        myString = res.getStringArray(R.array.hardships); 
                        String q = myString[rgenerator.nextInt(myString.length)];
                        TextView tv = (TextView) findViewById(R.id.text1);
                        tv.setText(q);

                    }

                    else {
                        //do nothing
                         }

                }

                @Override
                public void onNothingSelected(AdapterView<?> parentView) {
                //do something else
                    return;
                }
                });


    //dismiss button - Thank You
    Button buttonDismiss = (Button)findViewById(R.id.dismiss);

    buttonDismiss.setOnClickListener(new Button.OnClickListener(){

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                finish();
            }});

}

@Override
protected void onSaveInstanceState(Bundle outState) {
    outState.putStringArray(mSelection, situation);
    super.onSaveInstanceState(outState);
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    situation = savedInstanceState.getStringArray("mSelection");
    super.onRestoreInstanceState(savedInstanceState);
}


}

Вот как выглядит деятельность

Теги:
spinner

1 ответ

1
Лучший ответ

В вашей текущей onSaveInstanceState() переопределите метод, называемый onSaveInstanceState() и поместите ваши данные в пакет.

и переопределить другой метод onRestoreInstanceState() и получить эти значения из пакета....

  • 0
    Спасибо за ответ. Я все еще в замешательстве, извините - я только начинающий. Пожалуйста, вы можете сказать мне, где я могу переопределить метод? до создания (связки) или после этого? * Я сохранил пользовательский выбор счетчика следующим образом: 'MyScheduledActivity.this.mPos = pos; MyScheduledActivity.this.mSelection = parent.getItemAtPosition (pos) .toString (); ' Теперь, как мне сохранить эти данные в onSaveInstanceState (Bundle). Где я могу переопределить onRestoreInstanceState ()? Обратите внимание: это же действие будет перезагружаться снова для каждого конкретного периода времени. поэтому последняя позиция счетчика должна быть сохранена.
  • 0
    вы можете переопределить его там, где вы когда-либо захотите, внутри деятельности ... это вряд ли имеет значение ..
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню