Как поддерживать состояние 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().
  • И проверьте, доступны ли данные или нет, прежде чем попасть в сеть (здесь вы можете избежать ненужных веб-хитов).