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

问题描述 投票:-1回答:1

我有一个recyclerview,我想改变所选项目的颜色,并在未选中时重新更改它。我使用了一个字符串arraylist和一个接口,这是接口中的接口代码 -

  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提供背景颜色。我可以这样做。请帮忙。谢谢。

android android-recyclerview background-color selecteditem
1个回答
0
投票

在recyclerview中选择和取消选择项目的基本思路。

在模型中维护选定和未选定的标记。

对于e.x.

boolean isSelected;

当您填充数据时,使列表中的isSelected中的所有值都为false。

然后在你的长按中,仅在你的arraylist中将isSelected的值设置为true,并调用notifyDataSetChanged

并在你的onbindviewholder检查

if(yourModel.isSelected){

// show the row selected

}else {

// show the row unselected

}

我希望你明白这个主意。

© www.soinside.com 2019 - 2024. All rights reserved.