OnItemClickListener в ListView внутри фрагмента не работает

EDIT: РЕШЕН. Если в XML-объекте есть что-то, что можно сфокусировать, это нарушит контакт списка, другими словами, андроид: focusable = false для всех флажков, переключателей или чего-либо подобного списку ur. И сделал =)

Хорошо, вот моя проблема.

Я написал приложение, которое использует вкладки и фрагменты , и все идет так, как я хочу, за исключением того, что, когда я пытаюсь захватить onItemClick в listView, он даже не помещает строку как коснутую / нажатую / выбранную.

Я читал немного, и у многих людей такая же проблема, но я не нашел ответов, которые мне вообще помогли.

Я не хочу реализовывать ListFragment, на самом деле я даже не знаю, как / почему я должен, и поскольку весь мой код уже работает, я не знаю, будет ли реализация одной из них дать мне гораздо больше работы, Так вот, вот он:

Можно ли реализовать прослушиватель для щелчка по спискуView внутри фрагмента? И если это так, КАК?

PD: minSDK = 14, tatgetSDK = 15

Solutions Collecting From Web of "OnItemClickListener в ListView внутри фрагмента не работает"

Вот фрагмент кода, который сделает то, что вы хотите.

 ListView lv; //code to get the listView instance using findViewByID etc lv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1,int position, long arg3) { Toast.makeText(EnclosingActivity.this, "Stop Clicking me", Toast.LENGTH_SHORT).show(); } }); 

Люди обычно путешествуют по этому пути, посмотрите, есть ли у вас это:

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

Просто положите

 android:focusable="false" android:clickable="false" 

В макете. Для всех текстовых просмотров, кнопок и т. Д.

Это может быть полезно. Ответ от raghunanadan в следующей ссылке решил мою проблему

Listview OnItemClick listner не работает во фрагменте

Добавьте это в макет

android:descendantFocusability="blocksDescendants"

Два удивительных решения были, если ваш расширенный ListFragment из фрагмента, знаете, что mListView.setOnItemClickListener будет вызван до того, как ваша активность будет создана, как подразумевается @ dheeraj-bhaskar. Это решение обеспечило его настройку при создании активности

 @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); mListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int position, long rowId) { // Do the onItemClick action Log.d("ROWSELECT", "" + rowId); } }); } 

Рассматривая исходный код для ListFragment, я столкнулся с этим

  public class ListFragment extends Fragment { ........................................... ................................................ final private AdapterView.OnItemClickListener mOnClickListener = new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View v, int position, long id) { onListItemClick((ListView)parent, v, position, id); } }; ................................................................. ........................................................................ public void onListItemClick(ListView l, View v, int position, long id) { } } 

Объект onItemClickListener подключен, и он вызывает onListItemClick() Подобным же другим аналогичным решением, которое работает точно так же, является переопределение onListItemClick()

  @Override public void onListItemClick(ListView l, View v, int position, long rowId) { super.onListItemClick(l, v, position, id); // Do the onItemClick action Log.d("ROWSELECT", "" + rowId); } 

Ниже приведен обзор рабочего процесса, создайте свой ListView и соответствующий ему Adapter (используемый для сопоставления базовых данных с элементами в ListView), установите адаптер в ListView и добавьте к нему OnItemClickListener .

Более подробную информацию и пример кода можно найти по адресу: http://developer.android.com/guide/topics/ui/declaring-layout.html#AdapterViews

Если вы хотите передать данные из фрагмента в любое действие в списке Listview, вы можете изменить свой код, например …

 class HistoryFragment extends Fragment { ListView historyListView; public HistoryFragment() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v= inflater.inflate(R.layout.fragment_history, container, false); historyListView= (ListView) v.findViewById(R.id.historyDataListView); sendRequest(); //it is my meathod to load the listview and set the adapter return v; } public void onStart() { super.onStart(); historyListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { Intent intent=new Intent(getActivity(), DisplayDetails.class); intent.putExtra("text", historyListView.getItemAtPosition((int) l).toString()); startActivity(intent); // Toast.makeText(getActivity(),"Hello.. "+historyListView.getItemAtPosition((int) l).toString(),Toast.LENGTH_LONG).show(); } }); }}