【发布时间】: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上。其他适配器类(例如,ArrayAdapter、SimpleCursorAdapter)具有可以覆盖的具体实现。但是,是的,这就是我在之前的评论中引用的getView()方法。如果您不知道getView()是什么或它是如何工作的,那么在您开始重新考虑问题中引用的问题之前,您需要解决的知识差距要大得多。 -
我想我明白你的意思了。 getView() 用于根据屏幕上可查看的项目来回收视图,方法是使用不可查看的视图创建新视图。这意味着如果当前未显示我尝试访问的视图,则它可能不存在。为了更改项目的背景颜色,我是否必须覆盖 getView() 方法以检查那里的选择状态并在修改或不修改背景颜色的情况下生成它?
-
"为了改变背景颜色..." -- 正确。现在,根据您在此处执行的操作,“更改背景颜色”可以是“通过
setActivated()将激活状态应用于行”或字面意思是“更改用于行视图的任何容器的背景颜色”。这取决于你。但是,将其应用于新创建的列表的位置是getView()或等效项(例如,ViewBinder添加到SimpleCursorAdapter)。
标签: java android listview android-listview listviewitem