更改recyclerview中选定项目的背景颜色

时间:2019-04-12 07:56:14

标签: android android-recyclerview background-color selecteditem

我有一个recyclerview,我想在其中更改所选项目的颜色,并在未选中时重新更改它。我使用了一个字符串数组列表,并且为此使用了一个接口,这是适配器中的接口代码-

  public interface Callback{
        void onItemClicked(String i_name, boolean longClick);
    }

这是onclick和onlongclick代码-

 @Override
    public void onClick(View view) {
           String[] tag = ((String) view.getTag()).split(":");
           String i_name = tag[1];
        Toast.makeText(context, ""+i_name, Toast.LENGTH_SHORT).show();
        if(callback != null)
        {
            callback.onItemClicked(i_name,false);
        }

    }

    @Override
    public boolean onLongClick(View view) {
        String[] tag = ((String) view.getTag()).split(":");
        String i_name = tag[1];
        if(callback != null)
        {
            callback.onItemClicked(i_name,false);
        }
        return false;

    }

这是切换选择的代码-

  public void toggleSelected(String i_name)
    {
        final boolean newState = !selectedList.contains(i_name);
        if(newState)
        {
         // i want to give background color to i_name

               selectedList.add(i_name);
               Toast.makeText(context, "selected list1- "+selectedList, Toast.LENGTH_SHORT).show();
        }
        else
        {
            selectedList.remove((String) i_name);
            Toast.makeText(context, "selected list2- "+selectedList, Toast.LENGTH_SHORT).show();

        }
        notifyDataSetChanged();
    }

这是片段中的onItemClicked代码-

 @Override
    public void onItemClicked(String i_name, boolean longClick) {
        if(longClick)
        {
             ((MyCategoryAdaptercheckbox) MyAdapter).toggleSelected(i_name);
        }
        else
        {
            ((MyCategoryAdaptercheckbox) MyAdapter).toggleSelected(i_name);
        }
    }

这是我正在设置标签的onbindviewholder中的代码-

 getMyCategoryAdapter1 =  category_name.get(i);

        viewHolder.view.setActivated(selectedList.contains(i));
        viewHolder.view.setTag("items:" + getMyCategoryAdapter1.getC_name());
        viewHolder.view.setOnClickListener(this);
        viewHolder.view.setOnLongClickListener(this); 

我想使用toggleselected()方法为i_name提供背景颜色。我该怎么做。请帮忙。

1 个答案:

答案 0 :(得分:0)

在回收站视图中选择和取消选择项目的基本想法。

在模型中保留一个标记,以供选择和取消选择。

对于e.x

boolean isSelected;

填充数据时,默认情况下,列表中isSelected的所有值均为false。

然后在长按中,仅在您的数组列表中将该位置的isSelected的值设置为true,然后调用notifyDataSetChanged

并在您的onbindviewholder支票中

if(yourModel.isSelected){

// show the row selected

}else {

// show the row unselected

}

希望您能明白。