在RecyclerView中滚动时随机更改背景图像

时间:2015-12-01 10:39:06

标签: android android-recyclerview recycler-adapter

1)我想知道当我向下或向上滚动时,我的TextView背景改组,我使用CardView创建了RecyclerView。这是我的自定义适配器

  public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {


public static List<Myitems_item> my_items ;
Context context;

public CustomAdapter(Context context, List<Myitems_item> my_items) {

    this.context = context;
    this.my_items = my_items;
}


@Override
public CustomAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    // create a new view
    View itemLayoutView = LayoutInflater.from(viewGroup.getContext()).inflate(
            R.layout.innercard_size_selection, null);

    // create ViewHolder

    ViewHolder viewHolder = new ViewHolder(itemLayoutView);
    return viewHolder;
}

@Override
public void onBindViewHolder(final CustomAdapter.ViewHolder viewHolder, int i) {

    final Myitems to_off = my_items.get(i);

    viewHolder.productSize.setText(Double.toString(to_off.getNumber()));

    viewHolder.to_offer = to_off;
}

@Override
public int getItemCount() {
    return my_items.size();
}

// inner class to hold a reference to each item of RecyclerView
public  class ViewHolder extends RecyclerView.ViewHolder {

    public TextView productSize;

    public Myitems_item to_offer;

    public ViewHolder(View itemLayoutView) {
        super(itemLayoutView);

        productSize =TextView)itemLayoutView.findViewById(R.id.productSize);

        productSize.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                productSize.setBackgroundResource(R.drawable.focus_shape);
            }
        });

    }

}

知道怎么解决吗?滚动时为什么会这样。

2)如何在recyclerview中获得单一选择模式。 I want like this我的意思是我想创建像RadioGroup一样的recyclerview

2 个答案:

答案 0 :(得分:1)

在你的模型类(Myitems_item)中,你需要有一些布尔说'isSelected'来跟踪选定/未选择的情况。然后在onBindViewHolder()方法中,您需要检查当前位置中的项目是否被选中并相应地设置背景。

对于第二个问题,您必须首先为项目视图设置边框,例如下面的代码(将下面的drawable设置为项目背景)。

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
   <solid android:color="#ffffff" />
   <stroke android:width="1dip" android:color="#4fa5d5"/>
</shape>

然后对第一个问题应用相同的逻辑。 您需要在模型中使用布尔值来跟踪项目选择。 当用户单击某个项目时,将其背景设置为上面的drawable,并将该模型项目的布尔值设置为true。 然后,当用户单击下一个项目时,将前一个项目的布尔值设置为false,将当前项目设置为true,然后通知适配器。

我希望你明白我的观点。

答案 1 :(得分:0)

嘿,我在我的应用程序中使用下面的代码,

试试这段代码。

如果此代码有效,我将解释此代码。

如果有任何问题,请尝试告诉我。

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {
    public static List<Myitems_item> my_items ;
    Context context;
    private LayoutInflater inflater;

    public CustomAdapter(Context context, List<Myitems_item> my_items) {
        this.context = context;
        this.my_items = my_items;
        inflater = LayoutInflater.from(context);
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        // create a new view
        View itemLayoutView = inflater.inflate(R.layout.innercard_size_selection, false);
        // create ViewHolder
        ViewHolder viewHolder = new ViewHolder(itemLayoutView);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder viewHolder, int i) {
        final Myitems to_off = my_items.get(i);
        viewHolder.productSize.setText(Double.toString(to_off.getNumber()));
        viewHolder.to_offer = to_off;
    }

    @Override
    public int getItemCount() {
        return my_items.size();
    }

    // inner class to hold a reference to each item of RecyclerView

    public  class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        public TextView productSize;
        public Myitems_item to_offer;
        public ViewHolder(View itemLayoutView){
            super(itemLayoutView);
            itemLayoutView.setOnClickListener(this);
            productSize = (TextView) itemLayoutView.findViewById(R.id.productSize);
        }

        @Override
        public boolean onLongClick(View v) {
            productSize.setBackgroundResource(R.drawable.focus_shape);
        }
    }
}