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

时间:2018-04-01 08:26:16

标签: android android-recyclerview android-framelayout

我试图实现一个简单的RecyclerView示例,项目变为彩色https://i.stack.imgur.com/BFmJi.jpg,但工作正常 如果没有Framelayout,我们会得到一个清晰的着色代码,如第一张图片所示 即,物品以特定图案着色 然而 添加FrameLayout部分后,我遇到的问题是颜色代码没有正确显示https://i.stack.imgur.com/phKNT.jpg

从技术上讲,添加FrameLayout部分后发生了什么变化

这是RecyclerView类onBindView代码:

@Override
public void onBindViewHolder(DataAdapter.ViewHolder holder, int position) {
    if(values.contains(position+1)){
        holder.textView1.setBackgroundColor(ContextCompat.getColor(context,R.color.colorAccent));
        System.out.println("Color Check : "+values + " "+position);
    }
    String value = MyData[position];
    holder.textView1.setText(value);
}

这是RecyclerView xml文件:

<?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>

编辑1:

我需要的逻辑是项目1,3,6,10,15应该是彩色的(FrameLayout或textView) 逻辑工作正常,直到在RecyclerView的xml布局中引入了FrameLayout 变色的物品是1,3,6,8,10,13,15

2 个答案:

答案 0 :(得分:1)

我没有得到你的逻辑,但如果它在你使用RecyclerView作为简单列表而不是&#34;卡&#34;时工作,可能是因为onBindViewHolder只是打印所有内容而不使用回收当你使用大量的在您的列表中,recyclerview将尝试重用该内容。

你可以试试这个:

holder.setIsRecyclable(false);

答案 1 :(得分:1)

另一件对我有用的事情是需要为if和then条件设置剩余选项的条件 我认为它比制作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);
    }