码迷,mamicode.com
首页 > 其他好文 > 详细

ListFragment和ListActivity的setOnItemClickListener不起作用

时间:2015-08-27 13:13:55      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:

在使用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重写以达到自定义的目的的。

ListFragment和ListActivity的setOnItemClickListener不起作用

标签:

原文地址:http://www.cnblogs.com/zhujiabin/p/4762819.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!