1

я нашел этот удивительный материал кок онлайн, и я был в состоянии изменить его для моего кода:Использование sharedPreferences с материальной блесной обновить деятельность

<fr.ganfra.materialspinner.MaterialSpinner 
     android:id="@+id/spinner" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     app:ms_multiline="false" 
     app:ms_baseColor="@color/off" 
     app:ms_highlightColor="@color/off" 
     app:ms_hintColor="@color/off" 
     app:ms_arrowColor="@color/off" 
     app:ms_arrowSize="16dp" 
     app:ms_alignLabels="false" 
     app:ms_floatingLabelColor="@color/off"/> 

поэтому я использовал sharedPreferences хранить любое значение, пользователь выбирает из spinner, поэтому, когда эта страница вызывается снова, выбор выполняется на лицевой стороне. Это, как я добавить свои предпочтения в OnCreate:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.settings); 

String[] ITEMS = {"Daily", "Weekly", "Monthly"}; 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, ITEMS); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner = (MaterialSpinner)findViewById(R.id.spinner); 
    spinner.setAdapter(adapter); 
    spinner.setError(null); 

spinpref=getSharedPreferences("frequency", MODE_PRIVATE); 
      spinedit=spinpref.edit(); 
      spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
       @Override 
       public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
        if (position == 1) { 
         int freq1 = 1; 
         spinedit.putInt("freq", freq1); 
         spinedit.apply(); 
        } else if (position == 2) { 
         int freq2 = 2; 
         spinedit.putInt("freq", freq2); 
         spinedit.apply(); 
        } else if (position == 3) { 
         int freq3=3; 
         spinedit.putInt("freq", freq3); 
         spinedit.apply(); 
        } 
       } 

       @Override 
       public void onNothingSelected(AdapterView<?> parent) { 
        int freq0 = 0; 
        spinedit.putInt("freq", freq0); 
        spinedit.apply(); 
       } 

      }); 
      finish(); 
} 

затем в onResume, я делаю это:

@Override 
protected void onResume() { 

    spinpref=getSharedPreferences("frequency",MODE_PRIVATE); 
    int num=spinpref.getInt("freq", 0); 
    spinner.setSelection(num); 
} 

Но моя вертушка просто показывает первое значение, как я мог сделать это сделай так, чтоб это работало? Я не думаю, что sharedPrefs ошибочен, но это может быть onItemSelected(), и я не уверен, как еще я мог это сделать? PS: Я попытался заменить эту строку для каждой из позиций, как

spinedit.putInt("freq", position); 

вместо того, что у меня там прямо сейчас:

spinedit.putInt("freq", freq); 

, но это не сработало. Любые идеи или материалы, которые любой желающий может выявить для меня, пожалуйста? Я оценил бы это очень

+0

Где вы настройки адаптера спиннера? Вы должны установить его перед setSelection(). Правильно ли сохранено значение в SharedPreferences? Кроме того, вы пробовали использовать spinner.setSelection (num, false)? – Nikiole91

+0

Я отредактировал мой код, поэтому вы видите, как я установил свой адаптер. Кроме того, не последняя строка, которую вы предложили в ответ на getString из sharedPrefs? Я помещаю num в это, так что не следует ли считать число в pref? – Aria

+0

Просто сузить проблему: попробовали ли вы регистрировать переменную num (проверьте, является ли она правильным индексом) и/или передаете 1 или 2 int в setSelection (проверьте, не возникает ли проблема при обновлении счетчика) в onResume() метод? Если да, то каковы были результаты этого? – Nikiole91

ответ

0

Что я предлагаю (на мой комментарий выше):

public class MyActivity extends Activity { 
    SharedPreferences spinpref; 
    Editor spinedit; 

    //PREVENT TYPOS 
    private static final String PREF_NAME = "frequency"; 
    public static final String FREQUENCY = "freq"; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.settings); 

     //INIT PREFS 
     spinpref=getSharedPreferences(PREF_NAME, 0); 
     spinedit=spinpref.edit(); 

     //INIT SPINNER 
     ... 

     //SET LISTENER 
     ... 
    } 

    @Override 
    protected void onResume() { 
     int num=spinpref.getInt(FREQUENCY, 0); 
     spinner.setSelection(num); 
    } 

} 
+0

мой тоже настроен, но как бы вы сделали свой слушатель и счетчик? – Aria

+0

То же, что и вы, слушатель уволен, поэтому проблема заключается в том, что что-то не инициализируется, когда (следовательно, объявляя spinpref и spinedit за пределами onCreate()). Вы пытались сохранить prefs outisde в выражении if/else? – Nikiole91

+0

, но мои prefs предполагается получить целое число по выбранной позиции, как я могу сделать это вне if/else? – Aria

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