我正在使用标签式布局(使用滑动)。 这里我有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;
}
}
这是什么,我做错了?
提前多多感谢!
答案 0 :(得分:35)
如果您使用的是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);
}
答案 1 :(得分:15)
这是由于自定义列表项。默认焦点是自定义列表项(按钮/文本视图)。它导致了这个问题。
请在list元素的根布局中添加android:descendantFocusability="blocksDescendants"
。
希望这会对某人有所帮助。
答案 2 :(得分:0)
将setListAdapter(adapter);
更改为newsList.setAdapter(adapter);
答案 3 :(得分:0)
如果您想创建或重复使用或现有的实现AdapterView.OnItemClickListener
的处理程序,而不是在onListItemClick()
中实现ListFragment
,您可以通过获取对ListView
的引用来实现ListFragment
的{{1}}并设置其听众。在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
,ListActivity
或ListFragment
的同一个侦听器,例如
listView.setOnItemClickListener(new MyListViewOnClickListener(getActivity()));