2015-04-09 3 views
1

Я пробовал учебник, но я не могу сохранить состояние своего счетчика.не может сохранить состояние spinner android

Вот мой код:

 protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Firebase.setAndroidContext(this); 

     setContentView(R.layout.activity_main);   
    //language selection list 
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
      this, R.array.language_list, android.R.layout.simple_spinner_item); 

    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner.setAdapter(adapter); 

    spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 

     public void onItemSelected(AdapterView<?> arg0, View arg1, 
       int arg2, long arg3) { 

      // storing string resources into Array 
      lang_list = getResources().getStringArray(R.array.language_list); 

      Toast.makeText(getBaseContext(), "You have selected : " + lang_list[index], 
        Toast.LENGTH_SHORT).show(); 

      choice = spinner.getSelectedItem().toString(); 
      spinnerPos = arg2; 

      final ImageView country_flag = (ImageView)findViewById(R.id.country); 
      String s=((TextView)arg1).getText().toString(); 
      if(s.equals("English")) 
       country_flag.setImageDrawable(getResources().getDrawable(R.drawable.eng_spinner)); 
      if(s.equals("German")) 
       country_flag.setImageDrawable(getResources().getDrawable(R.drawable.german_spinner)); 
      if(s.equals("French")) 
       country_flag.setImageDrawable(getResources().getDrawable(R.drawable.french_spinner)); 
      if(s.equals("Spanish")) 
       country_flag.setImageDrawable(getResources().getDrawable(R.drawable.spanish_spinner)); 
     } 

     /*private int getPersistedItem() { 
      String keyName = makePersistedItemKeyName(); 
      return PreferenceManager.getDefaultSharedPreferences(MainActivity.this).getInt(keyName, 0); 
      } 
      protected void setPersistedItem(int position) { 
      String keyName = makePersistedItemKeyName(); 
      PreferenceManager.getDefaultSharedPreferences(MainActivity.this).edit().putInt(keyName, position).commit(); 
      } 
      private String makePersistedItemKeyName() { 
      return currentUserName + "_your_key"; 
      }*/ 


     public void onNothingSelected(AdapterView<?> arg0) { 

      // do nothing    
     } 

    }); 
} 

}

Для сохраненных состояний (это после OnCreate):

protected void onResume(){ 
    super.onResume(); 
    spinner.setSelection(spinnerPos); 
} 

protected void onSaveInstanceState(Bundle outState){ 
    super.onSaveInstanceState(outState); 
    outState.putInt("spinnerIndex", spinnerPos); 
    Log.d("SpinnerState", "Spinner at position " + spinnerPos + " was saved"); 
} 
protected void onRestoreInstanceState(Bundle savedInstanceState){ 
    super.onRestoreInstanceState(savedInstanceState); 
    savedInstanceState.getInt("spinnerIndex"); 
    Log.d("SpinnerState", "Spinner at position " + spinnerPos + " was restored"); 
} 

Я пытаюсь сохранить состояние вращателя, даже если приложение закрыто или действие остановлено. Может кто-то объяснить, почему он не работает.

ответ

1

Я получил это работает, используя общие предпочтения,

  1. Я получаю позицию вращателя:

    spinnerPos = arg2;

  2. I cr eated набора/инициализировать общие предпочтения в OnCreate:

    SharedPreferences spinnersaving = getSharedPreferences("spinnerstate",0);

  3. Используйте OnStop метод sharedpreferences с положением вращателя:

    protected void onStop(){ 
    super.onStop(); 
    SharedPreferences spinnersaving = getSharedPreferences("spinnerstate",0); 
    
    SharedPreferences.Editor editor = spinnersaving.edit(); 
    editor.putInt("spinnerPos", spinnerPos); 
    editor.commit(); 
    } 
    
  4. перед функцией вертушки нажми слушатель я получаю позицию вращателя от sharepreferences и установить его на счетчик:

    spinner.setSelection(spinnersaving.getInt("spinnerPos", 0));

Тогда это сработало. :)

0

onRestoreInstanceState вы должны assignate к spinnerPos сохраненного значения, например:

protected void onRestoreInstanceState(Bundle savedInstanceState){ 
super.onRestoreInstanceState(savedInstanceState); 

spinnerPos = savedInstanceState.getInt("spinnerIndex"); 

Log.d("SpinnerState", "Spinner at position " + spinnerPos + " was restored");} 
+0

извините не работает. После того, как я назначил его. Я работал, используя общие настройки. – nothingness

Смежные вопросы