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 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; } } 

这是什么,我做错了?

非常感谢提前!

Related of "ListFragment onItemClickListener无法正常工作"

如果您正在使用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); } 

这是由于自定义列表项。 默认焦点是自定义列表项(按钮/文本视图)。 它导致了这个问题。

请在list元素的根布局中添加android:descendantFocusability="blocksDescendants" 。 希望这会对某人有所帮助。

更改setListAdapter(adapter); to newsList.setAdapter(adapter);

如果要创建或重用或实现AdapterView.OnItemClickListener的现有处理程序,而不是在ListFragment实现onListItemClick() ,可以通过获取对ListFragmentListViewListFragment并设置其侦听器来实现。 在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"); } }); } 

在我的例子中,我可以使用来自具有ListViewListActivityListFragmentActivity的相同侦听ListFragment ,例如

listView.setOnItemClickListener(new MyListViewOnClickListener(getActivity()));