【问题标题】:Highlight and disable Listview items突出显示和禁用 Listview 项目
【发布时间】:2015-03-24 08:03:32
【问题描述】:

我的 ListView 有点问题。

我用 ArrayList<String> 每个 ArrayAdapter<String> 填充我的 ListView 有超过 100 个项目。
在显示我的对话框之前,我想突出显示和禁用某些项目。我找到了ListView.post(new Runnable() {...});的解决方案
我用lv.getChildAt(2).setBackgroundColor(Color.BLUE);突出显示我的项目
并使用lv.getChildAt(3).setEnabled(false);禁用项目
我在OnItemClickListener() 中也这样做了。

现在我的问题:
如果在 ListView 中有 11 个项目在运行时可见,则高亮和禁用模式将每 11 个项目重复一次。
即,如果我只突出显示 3. 项目以及 14.、25. ... 项目将获得蓝色背景。
如果我禁用了 4. 项目,那么 15. 和 26. 等也会被禁用。

如果我快速滚动到按钮并返回顶部,其他项目会突出显示并禁用。

另一个问题是,我只能访问 post-runnable 中的前 (11) 个可见项目。如果我尝试突出显示 20. 项目,应用程序将崩溃并出现 NullPointerException。

如何防止“项目回收”并在显示对话框之前获得对所有项目的完全访问权限?

【问题讨论】:

    标签: java android android-listview highlighting


    【解决方案1】:

    我不确定我是否理解您想要实现的目标,但这里有一些建议给您。

    1) 总是回收,你永远不应该避免回收,因为你可能会遇到另一个问题,你会耗尽内存。

    2) 在你的模型中实现 checkeable 接口,所以模型应该知道一个项目是否被选中,不仅仅是视图

    3) 迭代每个元素时,使用 ViewHolder,然后检查模型以查看是否选择了正在充气的元素并使用所需的颜色

    请看一下这个例子link,它描述了CAB(上下文操作栏)的使用,但它使用了我提到的东西。

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2013-02-04
      • 1970-01-01
      • 2012-01-05
      • 1970-01-01
      • 1970-01-01
      • 2013-11-18
      • 2022-10-16
      • 1970-01-01
      • 2013-11-05
      相关资源
      最近更新 更多