我有一个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提供背景颜色。我可以这样做。请帮忙。谢谢。
在recyclerview中选择和取消选择项目的基本思路。
在模型中维护选定和未选定的标记。
对于e.x.
boolean isSelected;
当您填充数据时,使列表中的isSelected
中的所有值都为false。
然后在你的长按中,仅在你的arraylist中将isSelected
的值设置为true,并调用notifyDataSetChanged
。
并在你的onbindviewholder
检查
if(yourModel.isSelected){
// show the row selected
}else {
// show the row unselected
}
我希望你明白这个主意。