я нашел этот удивительный материал кок онлайн, и я был в состоянии изменить его для моего кода:Использование 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);
, но это не сработало. Любые идеи или материалы, которые любой желающий может выявить для меня, пожалуйста? Я оценил бы это очень
Где вы настройки адаптера спиннера? Вы должны установить его перед setSelection(). Правильно ли сохранено значение в SharedPreferences? Кроме того, вы пробовали использовать spinner.setSelection (num, false)? – Nikiole91
Я отредактировал мой код, поэтому вы видите, как я установил свой адаптер. Кроме того, не последняя строка, которую вы предложили в ответ на getString из sharedPrefs? Я помещаю num в это, так что не следует ли считать число в pref? – Aria
Просто сузить проблему: попробовали ли вы регистрировать переменную num (проверьте, является ли она правильным индексом) и/или передаете 1 или 2 int в setSelection (проверьте, не возникает ли проблема при обновлении счетчика) в onResume() метод? Если да, то каковы были результаты этого? – Nikiole91