Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.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 嵌套布局时,recyclerview onBind无法正常工作_Android_Android Recyclerview_Android Framelayout - Fatal编程技术网

Android 嵌套布局时,recyclerview onBind无法正常工作

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应该是彩色的(框架布局或文本

我试图实现一个简单的RecyclerView示例,其中项目交替着色,效果很好
如果没有框架布局,我们将得到第一张图片中显示的清晰的着色代码 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);
    }