Изменение ориентации экрана Android ViewSwitcher

У меня есть ViewSwitcher в FragmentActivity с двумя файлами макета, по одному для каждой ориентации. ViewSwitcher управляется radio group.

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

Однако событие onCheckedChanged радиогруппы запускается при повороте экрана.
Слушатель для этого выглядит следующим образом (созданный в onCreate):

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
        //snip
        radios.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup radioGroup, int index) {

            viewSwitcher.showNext();
        }
        });
 }

Как я могу вызвать viewSwitcher.showNext() в listener, чтобы он не срабатывал при повороте экрана?


person Ben    schedule 21.06.2012    source источник


Ответы (1)


ну, я как бы нашел хакерское решение, но я надеюсь, что есть лучшее.

    private boolean wasRotatedHack;

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    this.savedInstanceState = savedInstanceState;
    if (savedInstanceState == null) {
        wasRotatedHack = false;
    } else {
        wasRotatedHack = true;
    }

    tabRadios.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup radioGroup, int index) {

            if (!wasRotatedHack) {
                viewSwitcher.showNext();
            } else {
                wasRotatedHack = false;
            }
        }
    });

    startInspectionButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            startActivity(new Intent(getApplicationContext(), InspectionActivity.class));
        }
    });
  }
person Ben    schedule 21.06.2012
comment
только что проверил это еще немного, он портится, когда вы выключаете экран и снова включаете. должен быть более чистый способ... - person Ben; 21.06.2012