【问题标题】:How to edit the background color of List View elements programmatically before the list view is shown in an android app?如何在列表视图显示在 android 应用程序中之前以编程方式编辑列表视图元素的背景颜色?
【发布时间】:2015-11-22 23:20:49
【问题描述】:

我正在 Android Studio 中使用 Java 创建一个 Android 应用程序。我需要创建一个列表视图,在重新创建列表视图时,以前选择的元素将显示为已选择。可以选择列表视图中的多个元素。列表视图将首先创建,我们将跟踪保存在Pair<String, boolean> 列表中的内容,其中String 是列表视图元素,boolean 表示该元素是否被选中。

我使用

处理背景颜色的变化
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
        {

            if(!tmpSelectedSkills.get(position).isSelected()){
                tmpSelectedSkills.get(position).setIsSelected(true);
                parent.getChildAt(position).setBackgroundColor(
                    Color.parseColor("#A9BCF5"));}
            else{
                tmpSelectedSkills.get(position).setIsSelected(false);
                parent.getChildAt(position).setBackgroundColor(
                        Color.parseColor("#ffffff"));}
        }

如果用户关闭列表视图并选择重新创建它以更改他的选择,我想在新列表视图中更改他之前选择的背景颜色,然后再将其显示给用户。

为此,我需要访问

View view

来自onItemClick的签名,对应我要更改背景颜色的View

【问题讨论】:

  • 您在ListAdapter 中处理此问题。使用ArrayAdapter,这将成为您的getView() 方法的一部分。对于SimpleCursorAdapter,可以通过ViewBinder 完成。以此类推。
  • @CommonsWare 你的意思是 public abstract android.view.View getView(int position, android.view.View convertView, android.view.ViewGroup parent) 吗?如果是这样,我不确定 convertView 在这里对应什么,以及父级代表什么(是列表视图吗?)
  • getView()abstract 仅在 BaseAdapter 上。其他适配器类(例如,ArrayAdapterSimpleCursorAdapter)具有可以覆盖的具体实现。但是,是的,这就是我在之前的评论中引用的 getView() 方法。如果您不知道 getView() 是什么或它是如何工作的,那么在您开始重新考虑问题中引用的问题之前,您需要解决的知识差距要大得多。
  • 我想我明白你的意思了。 getView() 用于根据屏幕上可查看的项目来回收视图,方法是使用不可查看的视图创建新视图。这意味着如果当前未显示我尝试访问的视图,则它可能不存在。为了更改项目的背景颜色,我是否必须覆盖 getView() 方法以检查那里的选择状态并在修改或不修改背景颜色的情况下生成它?
  • "为了改变背景颜色..." -- 正确。现在,根据您在此处执行的操作,“更改背景颜色”可以是“通过setActivated() 将激活状态应用于行”或字面意思是“更改用于行视图的任何容器的背景颜色”。这取决于你。但是,将其应用于新创建的列表的位置是 getView() 或等效项(例如,ViewBinder 添加到 SimpleCursorAdapter)。

标签: java android listview android-listview listviewitem


【解决方案1】:

您可以在您的adapter 中创建一个方法updateData()。在List&lt;YourObject&gt;YourObject 中定义一个字段boolean 用于知道选择。当您clickOnItem 的列表视图时,通过方法updateData() 将此字段设置为truenotifyDataChanged。在您的适配器中,检查字段是否 == true,为行设置背景。对不起我的英语不好

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-20
    • 2019-05-29
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多