[英]Single Selection item with Recycler Grid View
I have an issue, i am selecting a single item at a time with Recycler Gridview
, when I click on another item last item should be unselected我有一个问题,我使用
Recycler Gridview
一次选择一个项目,当我点击另一个项目时,最后一项应该被取消选择
Here is the solution for your requirement这是满足您要求的解决方案
public class AdapterClass extends RecyclerView.Adapter<AdapterClass.ViewHolder> {
private int selected_position = -1;
@Override
public void onBindViewHolder(AdapterClass.ViewHolder holder, final int position) {
if (selected_position == position) {
// do your stuff here like
//Change selected item background color and Show sub item views
} else {
// do your stuff here like
//Change unselected item background color and Hide sub item views
}
// rest of the code here
holder.linelayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(selected_position==position){
selected_position=-1;
notifyDataSetChanged();
return;
}
selected_position = position;
notifyDataSetChanged();
}
});
//rest of the code here
}
}
create a variable:创建一个变量:
private var lastSub: View? = null
and on your onClickListener of the recyclerview item use like this:并在您的 recyclerview 项目的 onClickListener 上使用如下:
override fun onClick(view: View) {
//val subjects = view.tag as Subject
//subId = subjects.id
if (lastSub != view && lastSub != null) {
lastSub!!.background = ResourcesCompat.getDrawable(resources, R.color.white, null)
view.background = ResourcesCompat.getDrawable(resources, R.drawable.card_border, null)
lastSub = view
} else {
view.background = ResourcesCompat.getDrawable(resources, R.drawable.card_border, null)
lastSub = view
}
}
class AdapterClass extends RecyclerView.Adapter<AdapterClass.ViewHolder> {
private int currentPosition = -1;
private int previousPosition = -1;
@Override
public void onBindViewHolder(AdapterClass.ViewHolder holder, final int position) {
holder.currentPos = position;
if(currentPosition == -1) {
previousPosition = position;
} else {
}
} else {
if(previousPosition == position) {
}
if(currentPosition == position) {
previousPosition = currentPosition;
} else {
}
}
}
}
// in view holder onClick you can notify previous and current
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
notifyItemChanged(previousPosition);
currentPosition = currentPos;
notifyItemChanged(currentPosition);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.