Как остановить выполнение onItemSelected при возврате с заблокированного экрана

У меня есть только один фрагмент, прикрепленный к действию с использованием замены. Когда устройство через несколько секунд блокирует экран, а затем я его разблокирую, выполняется метод onItemSelected, назначенный некоторому счетчику, даже несмотря на то, что представления фрагментов (EditTexts и т. Д.) И выбранный элемент счетчика остаются прежними.

public class MyFragment extends Fragment {

    private Spinner mySpinner;   

    public static MyFragment newInstance() {
        return new MyFragment();
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.some_layout, container, false);

        mySpinner = (Spinner)view.findViewById(R.id.my_spinner);

        List<String> items = new ArrayList<>();
        items.add("Anything");
        items.add("Anything");
        items.add("Anything");

        ArrayAdapter<String> adapter  =
                new ArrayAdapter<String>(
                        getContext(),
                        android.R.layout.simple_spinner_item,
                        items);

        mySpinner.setAdapter(adapter);

        mySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(getContext(), "Hello World", Toast.LENGTH_LONG).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });

        return view;
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
    }

}

Каждый раз, когда я выбираю элемент, я получаю всплывающее сообщение «Hello World» (или любой другой метод или действие, назначенное слушателю), но когда устройство блокируется, а затем я разблокирую, я все равно получаю сообщение, как если бы метод onItemSelected назывался.

Я пытался возиться с логическими значениями и методами фрагмента onSaveInstanceState и onActivityCreated, но я не нашел способа остановить выполнение метода onItemSelected, когда устройство возвращается с заблокированного экрана.


person FerDensetsu    schedule 10.01.2017    source источник
comment
Тебе обязательно? Маловероятно, что вы захотите, чтобы счетчик в конечном итоге просто выдавал тост. Скорее всего, вы установите какое-то значение, которое затем будет использоваться. например вы можете сделать что-то вроде myspinnerselecteditem = my.Spnner.getSecltedItem(), и в этом случае будет иметь значение, что он был установлен несколько раз?   -  person MikeT    schedule 11.01.2017
comment
Да, счетчик выполняет разные действия в зависимости от выбранного элемента, но это не имеет значения, потому что моя проблема в том, что onItemSelected выполняется при возврате с заблокированного экрана.   -  person FerDensetsu    schedule 11.01.2017


Ответы (1)


Проблема в том, что onItemSelected вызывается после инициализации Spinner, решение состоит в том, чтобы поставить mySpinner.setSelection(position, false) перед mySpinner.setOnItemSelectedListener ссылкой на это

person WenChao    schedule 10.01.2017