ListView PerformItemClick无法正常工作

时间:2013-01-26 10:45:34

标签: android listview onitemclick

这个问题已经被问了很多次,我已经系统地浏览了每个问题,并试图找出performItemClick的哪个版本有效。不幸的是,尽管我调用了onclick方法,但我无法让它们中的任何一个工作。

我有一个列表视图,其中有5个项目嵌入到片段中。该片段由fragmentstatepageradapter和viewpager控制。我正在尝试恢复已保存的状态。

        lv.setAdapter(new SimpleAdapter(getActivity(), list,
                R.layout.list_imageview, new String[] { "answer" },
                new int[] { android.R.id.text1 }));

简单适配器采用自定义布局,在布局中具有textview和imageview。最初,imageview为null,点击后将其设置为勾选或交叉。单击这些项目时,这项工作无效,只是按照以下方式编程:

@Override
    public void onViewStateRestored(Bundle savedInstanceState) {
        super.onViewStateRestored(savedInstanceState);
        if (savedInstanceState != null) {
            for (int i = 0; i < 5; i++) {
                lv.performItemClick(lv.getAdapter().getView(i, null, null),
                        i, i);
                Log.e("restoring state", "" + i);
            }
        }
    }

我可以确认调用了onViewStateRestored并且还调用了onItemClick。我认为这是我执行项目点击的方式的问题。我目前只是想让它发挥作用;我知道我还没有检查哪些项目被点击以有选择地点击它们,但这很容易boolean[]

我感谢你的帮助,对不起这么简单的问题,这个问题已经重复了很多次。尽管阅读它们我仍然无法让他们工作。

1 个答案:

答案 0 :(得分:1)

  

我认为这是我执行项目点击的方式的问题。

现在,您致电performItemClick,为其提供由适配器的View方法创建的 getView。问题是,如果你设置的图像与onItemClick回调接收的行视图有某种关联,你就不会看到任何结果,因为该视图与行视图无关(它在空中“)这实际上是在屏幕上看到的(或出现在ListView中)。但我只是在猜测。

无论如何,你不应该将ImageView工作与OnItemClickListener联系起来,你应该在适配器级别实现它(并调用notifydataSetChanged()),尤其是当你试图一次设置多行。