Как поддерживать состояние spinner в android
Я делаю приложение для Android, которое может получать данные из веб-сервиса и загружать его в spinner. Мне нужно поддерживать выбранное состояние данных счетчика, пока я иду на какой-то экран и возвращаюсь. Например, если я получаю данные из веб-службы как 1.apple 2.orange 3.grapes
и загружаю ее в счетчик, я выбираю orange
. Когда я перехожу на другой экран и вернусь, выбранные данные счетчика должны быть orange
. Но он снова загружает данные с сервера в прядильщик. Может ли кто-нибудь помочь мне разрешить это?
Мой код:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//...
if (Constants.SPINNER != null ) {
spinner.setSelection( Constants.SPINNER);
} else {
//WebCall here for getting data
}
//...
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent,
View view, int arg2, long arg3) {
Constants.SPINNER = spinner.getSelectedItemPosition();
В классе Constant
:
public static Integer SPINNER="";
Ответы
Ответ 1
Вы можете использовать
spinner.getSelectedItemPosition();
который вернет вам int, который вы можете сохранить с помощью
prefEdit.putInt();
тогда, когда вы хотите перезагрузить все, что было сохранено, вы просто вызываете
spinner.setSelection(prefs.getInt("key", default));
ИЛИ ПОПРОСИТЕ ЭТО
Сохранить:
int selectedPosition = yourSpinner.getSelectedItemPosition()
editor.putInt("spinnerSelection", selectedPosition);
editor.commit();
Загрузить:
yourSpinner.setSelection(prefs.getInt("spinnerSelection",0));
Если вы используете массив, он должен измениться следующим образом
String selectedString = yourArray[yourSpinner.getSelectedItemPosition()];
editor.putString("spinnerSelection", selectedString);
editor.commit();
проверить массив [i] на значение, сохраненное в prefs.if, если вы используете ArrayList, вместо этого эта часть может быть выполнена без цикла, вызвав
ArrayList.indexOf(prefs.getString("spinnerSelection", "");
когда вы совершаете передачу, все элементы массива выше. не показывать в массив.
Ответ 2
Вы можете выполнить следующую процедуру:
Вам нужно сохранить состояние вашего счетчика, чтобы это было полезно для вас.
1.) Примените это после создания объекта spinner
sectionNameSpinner.setSelection(getPersistedItem());
2.) Создайте эти методы в соответствии с вами, чтобы сохранить состояние выбранного вами элемента
private int getPersistedItem() {
String keyName = makePersistedItemKeyName();
return PreferenceManager.getDefaultSharedPreferences(this).getInt(keyName, 0);
}
protected void setPersistedItem(int position) {
String keyName = makePersistedItemKeyName();
PreferenceManager.getDefaultSharedPreferences(this).edit().putInt(keyName, position).commit();
}
private String makePersistedItemKeyName() {
return currentUserName + "_your_key";
}
3.) Задайте свое состояние при изменении выбора счетчика:
sectionNameSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View view, int position, long itemId) {
setPersistedItem(position);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
Ответ 3
Когда вы "переходите на другой экран", вы должны сделать это с помощью нового действия. Затем, после того, как вы закончите это новое действие, активность выбора счетчика возобновится, и состояние выбора будет таким, как было до начала второго действия.
Ответ 4
- Убедитесь, что вы не нажимаете на веб-сервис в OnResume() своей активности.
- Перед тем, как перейти к следующему действию, не завершайте текущую деятельность, вызывая функцию finish().
- И проверьте, доступны ли данные или нет, прежде чем попасть в сеть (здесь вы можете избежать ненужных веб-хитов).