ListFragment和ListActivity的setOnItemClickListener不起作用
2014-11-13 15:31
225 查看
在使用ListFragment时,发现一个奇怪的问题,就是getListView().setOnItemClickListener(new OnItemClickListener...)不起作用。在stackoverflow查了一下,都说是重写一下OnListItemClick函数就好了。一番研究之后,发现了其中奥秘。
之前代码是这样写的:
onCreateView函数有如下代码。
View view = inflater.inflate(R.layout.fragment_choose_school, null);
list = (ListView) view.findViewById(android.R.id.list);
list.setAdapter(new ArrayAdapter<String>(activity, android.R.layout.simple_list_item_1, data));
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int pos, long id) {
search.setText(data.get(pos));
Step.next();
}
});
但是红色部分一直运行不到。
查找ListFragment.java源代码部分如下:
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) {
}
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ensureList();
}
private void ensureList() {
...
mList.setOnItemClickListener(mOnClickListener);
...
}
所以,问题出在这里,在onCreateView里setOnItemClickListener设置后,onViewCreated又会再一次setOnItemClickListener,从而覆盖了之前的。正确的做法当然是重写onListItemClick即可。但是我觉得也可以在onViewCreated重写以达到自定义的目的的。
之前代码是这样写的:
onCreateView函数有如下代码。
View view = inflater.inflate(R.layout.fragment_choose_school, null);
list = (ListView) view.findViewById(android.R.id.list);
list.setAdapter(new ArrayAdapter<String>(activity, android.R.layout.simple_list_item_1, data));
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int pos, long id) {
search.setText(data.get(pos));
Step.next();
}
});
但是红色部分一直运行不到。
查找ListFragment.java源代码部分如下:
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) {
}
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ensureList();
}
private void ensureList() {
...
mList.setOnItemClickListener(mOnClickListener);
...
}
所以,问题出在这里,在onCreateView里setOnItemClickListener设置后,onViewCreated又会再一次setOnItemClickListener,从而覆盖了之前的。正确的做法当然是重写onListItemClick即可。但是我觉得也可以在onViewCreated重写以达到自定义的目的的。
相关文章推荐
- ListFragment和ListActivity的setOnItemClickListener不起作用
- ListView、ListFragment 无法实现 onListItemClick和setOnLongClickListener
- Android GridView setOnItemClickListener 监听事件不起作用的一个原因
- Fragment里面的列表,setOnItemClickListener无响应
- 求助: fragment 下listview.setOnItemClickListener() 无效
- fragment中使用setOnItemClickListener监听无效的解决办法
- fragment中listview触发事件setOnItemClickListener不好使
- Fragment中ListView.setOnItemClickListener失效的问题
- 求助: fragment 下listview.setOnItemClickListener() 无效
- ListView.setOnItemClickListener不起作用的原因
- ListView.setOnItemClickListener有时不响应
- GridView,ListView 等adapter容器view设置setOnItemClickListener不响应的问题。
- onItemClickListener不起作用解决办法
- 支持setOnItemClickListener的RecyclerView
- 解决textview.setMovementMethod后Listview的OnItemClickListener点击失效问题
- popupwindow 中listview setOnItemClick不起作用
- 解决ListView setOnItemLongClickListener 长按无响应(嵌套GridView)
- ListView.setOnItemClickListener无效,解决方法
- ListView setOnItemClickListener无法响应点击事件解决
- 如果ListView中的单个Item的view中存在checkbox,button等view,会导致ListView.setOnItemClickListener无效