Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在某些网格项目上设置不同的颜色_Android_Android Layout_Android Recyclerview_Recyclerview Layout - Fatal编程技术网

Android 在某些网格项目上设置不同的颜色

Android 在某些网格项目上设置不同的颜色,android,android-layout,android-recyclerview,recyclerview-layout,Android,Android Layout,Android Recyclerview,Recyclerview Layout,我想根据项目的模型是否有一些布尔值设置为tru或false来设置不同的网格项目背景颜色。因此,在我的myRecycleServiceAdapter中的onBindViewHolder方法中,我检查: if (current.hasWiki()) { holder.linearLayout.setBackgroundColor(0xCCF0FCC0); } 加载recycler网格视图时,它看起来很好,hasWiki==true的项目被涂成绿色,hasWiki==fal

我想根据项目的模型是否有一些布尔值设置为tru或false来设置不同的网格项目背景颜色。因此,在我的
myRecycleServiceAdapter
中的
onBindViewHolder
方法中,我检查:

if (current.hasWiki()) {
        holder.linearLayout.setBackgroundColor(0xCCF0FCC0);
    } 
加载recycler网格视图时,它看起来很好,hasWiki==true的项目被涂成绿色,hasWiki==false的项目则完全没有颜色。但是当我向下滚动,那些未着色的项目不再显示在屏幕上时,我再次向上滚动,这些应该是未着色的项目现在变成绿色。一切都搞砸了

这是我的MyViewHolder:

public MyViewHolder(View itemView) {
        super(itemView);
        linearLayout = (LinearLayout)itemView.findViewById(R.id.rootLayout);
}
那么,我如何纠正这些不良行为呢?有没有其他方法可以根据任意标志为recyclerview项目设置不同的颜色?

更改此选项:

为此:

if (current.hasWiki()) {
    holder.linearLayout.setBackgroundColor(0xCCF0FCC0);
} else {
    holder.linearLayout.setBackgroundColor(/* default color here */);
}
在处理
RecyclerView
时,务必了解您的
ViewHolder将被回收和重用。因此,如果您希望“有时”发生某些事情,您需要确保在“有时”未发生时始终将状态设置回默认状态。

更改此项:

为此:

if (current.hasWiki()) {
    holder.linearLayout.setBackgroundColor(0xCCF0FCC0);
} else {
    holder.linearLayout.setBackgroundColor(/* default color here */);
}

在处理
RecyclerView
时,务必了解您的
ViewHolder将被回收和重用。因此,如果您希望“有时”发生某些事情,则需要确保在“有时”未发生时始终将状态设置回默认状态。

这是回收视图的本质,甚至是在使用常规列表视图的旧方法时。您面临的问题是,您实际上没有回收视图。回收器视图将传递包含需要回收的旧视图的视图持有者。换句话说,当您滚动时,您将收到以前设置为绿色的视图,现在需要设置为白色(或您想要的任何颜色)。请记住,如果您之前收到view
xyz的视图保持架,则无法保证下次滚动到该视图时会收到相同的保持架。它可以是另一个

您显示的逻辑位:

if (current.hasWiki()) {
    holder.linearLayout.setBackgroundColor(0xCCF0FCC0);
} 
是正确的,但你们正在回收的物品应该是白色背景(或者其他颜色)吗?这些没有设定,但必须设定

if (current.hasWiki()) {
    holder.linearLayout.setBackgroundColor(0xCCF0FCC0);
} else {
    holder.linearLayout.setBackgroundColor(Color.WHITE);
}

这样可以确保正确回收每个视图的背景。现在,这里所说的背景适用于视图支架中的任何视图,包括图像-它们必须正确设置为a.k.a.recycled-这就是为什么它被称为recycler视图。

这是循环视图的本质,甚至当您对普通列表视图使用旧方法时。您面临的问题是,您实际上没有回收视图。回收器视图将传递包含需要回收的旧视图的视图持有者。换句话说,当您滚动时,您将收到以前设置为绿色的视图,现在需要设置为白色(或您想要的任何颜色)。请记住,如果您之前收到view
xyz的视图保持架,则无法保证下次滚动到该视图时会收到相同的保持架。它可以是另一个

您显示的逻辑位:

if (current.hasWiki()) {
    holder.linearLayout.setBackgroundColor(0xCCF0FCC0);
} 
是正确的,但你们正在回收的物品应该是白色背景(或者其他颜色)吗?这些没有设定,但必须设定

if (current.hasWiki()) {
    holder.linearLayout.setBackgroundColor(0xCCF0FCC0);
} else {
    holder.linearLayout.setBackgroundColor(Color.WHITE);
}

这样可以确保正确回收每个视图的背景。现在,这里所说的背景适用于视图持有者中的任何视图,包括图像-它们必须正确设置为a.k.a.Recycle-这就是为什么它被称为recycler视图的原因。

您需要在onBindViewHolder()方法中添加
else
语句


您需要在onBindViewHolder()方法中添加一个
else
语句