2012-03-09 4 views
3

Здравствуйте, у меня есть проблема с методом onListItemClick в ListFragment.onListItemClick не вызывается в Listfragment

У меня есть активность, которая содержит 2 ListFragments. Первый - суб-навигационный, а второй - некоторый контент. Sub nafigation werks отлично работает, и событие onListItemClick вызывается при нажатии на элемент списка. Но для второго ListFragment ничего не происходит. Метод не вызывается.

До сих пор я также пытался заменить Listfragment стандартным фрагментом и вручную установить setOnItemClickListener. Но он не запускается, когда я нажимаю на запись списка. Я также попытался проверить его с помощью другого прослушивателя (например, onLongItemClick), но ничего не произошло.

Это настройки для моего списка.

<ListView  
      android:id     ="@+id/mylistview" 
      android:layout_width  ="match_parent" 
      android:layout_height  ="match_parent" 
      android:divider    ="@android:color/transparent" 
      android:dividerHeight  ="10dp" 
      android:listSelector  ="@android:color/transparent" 
      android:cacheColorHint  ="@android:color/transparent"/> 

Обратите внимание, что я заменил идентификатор со стандартом "@android: ID/список" при использовании ListFragment.

Кто-нибудь знает, что здесь не так? Может ли быть так, что другие ListFragments получат все вызовы onListItemClick и не позволяют этому уволить?

Вот адаптер, который прилагается к списку:

setListAdapter(new CustomRatingBarListAdapter(mListEntries, 
      getActivity(), R.layout.content_view_list_layout, 
      new int[] { R.id.list_item_text1 }, new String[] { TEXT}); 
+1

проверить мой [старый] (http://stackoverflow.com/a/9577954/1250370) пост, если это поможет вам. – Deepak

ответ

1

Хорошо, я нашел ошибку. Это было нечто совершенно другое. На самом деле у меня была рейтинговая панель в качестве элемента списка, и даже жестко она не охватывала весь элемент списка, он каким-то образом получил все события кликов.

Изменение видимости на GONE на данный момент решило проблему. Таким образом, проблема заключалась в компоновке одного элемента списка, а не адаптера.

1

Я думаю, что вы можете получить ListView, вызвав этот метод getActivity().

Если я прав, воспользуйтесь этим getListView(); insted of getActivity().

+0

Поскольку 2 ListFragments активны одновременно, возможно, это имеет какое-то отношение к контексту. Но изменение контекста в getListView() не помогает. Поскольку оба фрагмента привязаны к одному и тому же действию, нужно ли мне показывать активность, как обрабатывать клики? – Norman

4

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

3

Корректировать адаптера элементы списка (строки) (только * .xml файл на макет/папку) Установка:

android:focusable="false" 

Или, если вы инъекционные их программно, код:

yourChildView.setFocusable(false); 

Do это со всеми компонентами пользовательского интерфейса, которые могли бы сфокусироваться, такие как Button, RatingBar, EditText, ToggleButton внутри представления, который составляет элемент списка (строка) и т. д.

+0

В моей конкретной ситуации это не помогло установить атрибут 'android: focusable' на мой' myRowLayout.xml'. Я также должен был бы установить его программным путем - бог знает, почему. –

1

Использование OnTouchListener() instea d к другим компонентам в моей строке списка сделал трюк для меня. Надеюсь, что это поможет.