ListView в фоновом режиме получает ввод (Fragment API)

1

Мое приложение основано на макете с вкладками, где каждая вкладка назначает FragmentActivity.
Один из этих действий имеет следующий макет:

<FrameLayout
android:id="@+id/filialenView"
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">

<ListView android:layout_height="wrap_content" android:id="@+id/filialList"
  android:layout_width="fill_parent"></ListView>

</FrameLayout>

При переключении на эту вкладку создается и отображается список.
Если выбран элемент списка, создается Фрагмент и отображается поверх списка:

    Filiale fragment = new Filiale();
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

    fragmentTransaction.replace(R.id.filialenView, fragment);

    fragmentTransaction.addToBackStack(null);
    fragmentTransaction.commit();

Макет "filial_detail.xml" для Fragment Filiale выглядит как

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
 ... content...
</LinearLayout>

и надувается в onCreateView, как это показано

View curView = inflater.inflate(R.layout.filial_detail, container, false);

Все работает так, как ожидалось, за исключением того, что после переключения на Фрагмент список заметок nomore, похоже, сохраняет фокус ввода. Если я коснусь экрана в некоторой "пустой" области, скрытый элемент списка за триггерами фрагмента. Кроме того, если я прокручиваю, я могу видеть из вывода LogCat, что список прокручивается.
Основываясь на моем понимании FrameLayout, должно быть хорошо, что бы складывать представления, подобные этому.

Что не так с этим кодом? Поскольку нет ответа или комментария, более общий вопрос:
Есть ли какая-либо известная ситуация, когда представление в фоновом режиме должно получать вход или это неправильное поведение в любом случае?

Теги:
fragment
focus
tabs
framelayout

1 ответ

1
Лучший ответ

Причиной такого поведения является то, что по умолчанию ViewGroups не обрабатывают входные события, а передают их виджетам позади них, если они есть.
В моем заданном коде список имеет высоту "wrap_content", поэтому оставшаяся вертикальная область покрывается только элементом LinearLayout, который передает вход через скрытый фрагмент.
Поведение, которое я хотел, может быть достигнуто с помощью

  • установка высоты спискаView в "fill_parent" или
  • добавление OnClickListener в LinearLayout с помощью пустого метода onClick
  • 0
    +1 за раскрытие групп просмотра, не обрабатывающих входные события по умолчанию.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню