【问题标题】:ListView PerformItemClick not workingListView PerformItemClick 不起作用
【发布时间】:2013-01-26 10:45:33
【问题描述】:

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

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

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

简单的适配器接受一个自定义布局,该布局在布局中具有 textview 和 imageview。最初,图像视图为空,单击时将其设置为勾号或十字。当我自己单击项目时,这有效,但不能以编程方式工作,如下所示:

@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[]

感谢您的帮助,对于如此简单的问题已经重复了很多次,我深表歉意;尽管阅读了它们,但我仍然无法让它们工作。

【问题讨论】:

    标签: android listview onitemclick


    【解决方案1】:

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

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

    无论如何,您不应该将 ImageView 工作绑定到 OnItemClickListener,您应该在适配器级别实现它(并调用 notifydataSetChanged()),尤其是当您尝试一次设置多行时。

    【讨论】:

    • 这解释得非常惊人!我正在尝试
    • 测试它看起来肯定没有采用原始显示列表的ID,而是确实获得了新视图。如何在适配器级别实现它? (请,谢谢)
    • @AndroidPenguin 我不知道您在 onItemClick 方法中在做什么(而且我也没有看到您使用 SimpleAdapter,当您滚动时不是 ImageViews 重复?>)。我将修改支持适配器的list,以便每一行Map 包含另一个名为state 的列以保存ImageView 的状态。在onViewStateRestored 中,我将更新每个地图中的state 列并调用notifyDataSetChanged。您需要对如何使用适配器进行一些修改。看到这个gist.github.com/4641788
    猜你喜欢
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    • 2017-07-07
    相关资源
    最近更新 更多