Android 嵌套布局时,recyclerview onBind无法正常工作
我试图实现一个简单的RecyclerView示例,其中项目交替着色,效果很好Android 嵌套布局时,recyclerview onBind无法正常工作,android,android-recyclerview,android-framelayout,Android,Android Recyclerview,Android Framelayout,我试图实现一个简单的RecyclerView示例,其中项目交替着色,效果很好 如果没有框架布局,我们将得到第一张图片中显示的清晰的着色代码 i、 e.项目以特定图案着色 然而 在添加FrameLayout部分后,我遇到了一个问题,即颜色代码没有正确显示 从技术上讲,添加FrameLayout部分后发生了什么变化 这是RecyclerView类onBindView代码: 这是RecyclerView xml文件: 编辑1: 我需要的逻辑是项目1、3、6、10、15应该是彩色的(框架布局或文本
如果没有框架布局,我们将得到第一张图片中显示的清晰的着色代码 i、 e.项目以特定图案着色 然而 在添加FrameLayout部分后,我遇到了一个问题,即颜色代码没有正确显示
从技术上讲,添加FrameLayout部分后发生了什么变化 这是RecyclerView类onBindView代码: 这是RecyclerView xml文件:
编辑1:
我需要的逻辑是项目1、3、6、10、15应该是彩色的(框架布局或文本视图)在RecyclerView post的xml布局中引入FrameLayout之前,该逻辑工作正常,
正在上色的项目是1,3,6,8,10,13,15我不明白你的逻辑,但如果它在使用RecyclerView作为简单列表而不是“卡片”时起作用,可能是因为onBindViewHolder只是在打印所有内容而没有回收,当您在列表中使用大量大小时,recyclerview将尝试重新使用内容 您可以尝试以下方法:
holder.setIsRecyclable(false);
另一件对我有效的事情是需要为if设置条件,然后为剩余选项设置else条件 我认为它比使holder.setisrecycle(false)更好
请提供您的预期结果。添加FrameLayout后,我没有看到图像中有任何错误。你想让整个卡片都有颜色吗?如果你想让孔项目有颜色,你应该将颜色设置为FrameLayout,而不是TextView…没有特定的需要给FrameLayout上色,我也试过了,主要的问题是逻辑没有得到复制,在Framelayout中,当你说“颜色代码不正确”时,“回收者”视图的添加方式有些奇怪。你的确切意思是什么?你想让文本视图后面的整个框架都着色吗?…然后按照@HedShafran的建议做。。。还可以通过编辑你的评论来阐述你的评论,“回收者视图的行为有些奇怪”question@nobalG我已经添加了编辑,问题不在于框架布局或文本视图的着色,我已经尝试了这两种方法,但是项目着色的顺序是问题,就像魅力一样,但是我仍然好奇到底发生了什么,这是否意味着代码在使用RecyclerView时不会利用缓存
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content">
<FrameLayout
android:layout_width="match_parent"
android:elevation="16dp"
android:layout_margin="16dp"
android:id="@+id/frame1"
android:background="#fff"
android:layout_height="200dp">
<TextView
android:layout_width="match_parent"
android:id="@+id/textView1"
android:text="Sample Items"
android:layout_height="wrap_content"
/>
</FrameLayout>
</LinearLayout>
holder.setIsRecyclable(false);
@Override
public void onBindViewHolder(DataAdapter.ViewHolder holder, int position) {
//holder.setIsRecyclable(false);
if(values.contains(position+1)){
holder.textView1.setBackgroundColor(ContextCompat.getColor(context,R.color.colorAccent));
}else
{
holder.textView1.setBackgroundColor(ContextCompat.getColor(context,R.color.white));
}
String value = MyData[position];
holder.textView1.setText(value);
}