ListView в фоновом режиме получает ввод (Fragment API) - PullRequest
1 голос
/ 31 мая 2011

Мое приложение основано на макете с вкладками, где каждой вкладке назначается 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" для фрагмента 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);

Все работает, как и ожидалось, за исключением того, что после переключения на фрагмент видимый видимый список, кажется, сохраняет фокус ввода.Если я коснусь экрана в какой-то «пустой» области, то появится скрытый элемент списка за фрагментом.Кроме того, если я проведу пальцем по экрану, из вывода LogCat можно увидеть, что список прокручивается.
Исходя из моего понимания FrameLayout, все в порядке, чтобы складывать представления таким образом.

Что не так с этим кодом?

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

1 Ответ

1 голос
/ 04 июня 2011

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

  • установки высоты listView равным "fill_parent""или
  • добавление OnClickListener к LinearLayout с пустым методом onClick
...