2016-01-04 6 views
1

Я использую 'ListFragment' для отображения элементов списка. XML-ListView является:Элементы списка не доступны для просмотра

<ListView 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:id="@android:id/list" 
    android:layout_weight="1" 
    android:dividerHeight="4dp" /> 

и расположение XML для элементов является:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="horizontal" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<TextView 
    android:id="@+id/fromId" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:visibility="gone" /> 

<TextView 
    android:id="@+id/fromName" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:singleLine="false" 
    android:layout_weight="1" /> 

<TextView 
    android:id="@+id/toId" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:visibility="gone" /> 

<TextView 
    android:id="@+id/toName" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:singleLine="false" 
    android:layout_weight="1"/> 
</LinearLayout> 

У меня также есть следующие в фрагменте:

@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 
    MyItem item = (MyItem)l.getItemAtPosition(position); 
} 

Однако детали не кликабельны.

Что мне не хватает?

+0

Где вызывается 'setOnItemClickListener'? –

+0

@ ρяσѕρєяK Мне не нужно вызывать 'setOnItemClickListener', потому что я использую' ListFragment'. Однако я действительно переопределяю 'onListItemClick'. –

ответ

2

ли вы попробовать с

ListView listView = getListView(); 
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     Toast.makeText(getActivity().getBaseContext(), "Item clicked: " + [position], Toast.LENGTH_LONG).show(); 
      // Your Staff 
     } 
    }); 

Или

getListView().setOnItemClickListener(this); // onActivityCreated() 


    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, 
      long id) { 

     Toast.makeText(getActivity(), "Item: " + position, Toast.LENGTH_SHORT) 
       .show(); 

    } 

Отредактировано

@Override 
    public void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 
    Toast.makeText(getActivity().getBaseContext(), "Item clicked: " + [position], Toast.LENGTH_LONG).show(); 
     MyItem item = (MyItem)l.getItemAtPosition(position); 
    } 
+0

Не нужно, потому что этот код обрабатывается в 'ListFragment'. –

+0

@ Ivan-MarkDebono. Позвольте мне прокомментировать. –

+0

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

1

Попробуйте добавить в свой ListView Layout

android:clickable="true" 

И Реализовать listView.setOnItemClickListener в вашем ListFragment

0

Используйте эту строку в ваших позициях родительского компоновщика

android:descendantFocusability="afterDescendants" 

имеет три опции afterDescendants, beforeDescendants и blockDescendants. Вы должны использовать один из них, он будет работать

+1

Ни один из трех вариантов не работает. –

+1

Правильный атрибут «blocksDescendants» вместо «blockDescendants» – PayToPwn

Смежные вопросы