ListFragment onItemClickListener не работает
Я использую макет с вкладками (с помощью салфетки).
Здесь у меня есть 3 вкладки с контролем SectionsPagerAdapter. Каждая вкладка представляет собой ListFragment.
Теперь я хочу, чтобы событие было запущено, когда щелкнул один из элементов в списке. Я хотел бы прослушивать каждую вкладку.
Здесь код теперь (который не работает, событие не запускается).
public class NyhederFragment extends ListFragment {
public static final String ARG_SECTION_NUMBER = "section_number";
private static final String TAG="NyhederFragment";
private List<Item> newsItems;
private ArrayList newsHeadlines;
private ArrayAdapter adapter;
private BroadcastReceiver updateReciever;
public NyhederFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
ListView newsList = new ListView(getActivity());
newsList.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
newsList.setId(R.id.list);
DatabaseHelper dbConn = new DatabaseHelper(getActivity());
newsItems = dbConn.getAllItemsFromNews();
newsHeadlines = new ArrayList();
for(Item i : newsItems){
newsHeadlines.add(i.getTitle());
}
adapter = new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, newsHeadlines);
setListAdapter(adapter);
newsList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Log.i("debug", "single click");
}
});
dbConn.close();
getActivity().registerReceiver(updateReciever, new IntentFilter("ArticlesUpdated"));
return newsList;
}
}
Что это, я делаю неправильно?
Большое спасибо!
Ответы
Ответ 1
Если вы используете ListFragment
, вы можете просто использовать его метод переопределения onListItemClick()
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
super.onListItemClick(l, v, position, id);
}
Ответ 2
Это связано с настраиваемым элементом списка. Фокус по умолчанию - настраиваемый элемент списка (кнопка/текстовое изображение). Это вызывает эту проблему.
Добавьте android:descendantFocusability="blocksDescendants"
в корневой макет элемента списка.
Надеюсь, это поможет кому-то.
Ответ 3
измените setListAdapter(adapter);
на newsList.setAdapter(adapter);
Ответ 4
Если вы хотите создать или повторно использовать или существующий обработчик, который реализует AdapterView.OnItemClickListener
, вместо реализации onListItemClick()
в ListFragment
, вы можете сделать это, получив ссылку на ListView
в ListFragment
и установить его прослушиватель. В ListFragment.onResume()
вы можете:
@Override
public void onResume() {
super.onResume();
ListView listView = getListView();
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.d("TAG", "Stop touching me");
}
});
}
В моем случае я могу использовать один и тот же прослушиватель из Activity
с ListView
, a ListActivity
или ListFragment
, например
listView.setOnItemClickListener(new MyListViewOnClickListener(getActivity()));