简体   繁体   English

带有 Recycler Grid 视图的单选项目

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM