简体   繁体   中英

Android Firebase Recyclerview - How to deselect previous selected item?

I have a simple question. I have a recyclerview with list items, what I can do is highlight the items you click on. My problem is that I don't know how to deselect the previous item the user has clicked on so only 1 item can be selected.

private void loadCategories() {
    adapter = new FirebaseRecyclerAdapter<Category, CategoryViewHolder>(
            Category.class,
            R.layout.categoryaddquestions_layout,
            CategoryViewHolder.class,
            categories
    ) {

        @Override
        protected void populateViewHolder(CategoryViewHolder viewHolder, final Category model, int position) {
            viewHolder.category_name.setText(model.getName());


            viewHolder.setItemClickListener(new ItemClickListener() {
                @Override
                public void onClick(View view, int position, boolean isLongClick) {
                    view.setSelected(false);
                }
            });
        }
    };
    adapter.notifyDataSetChanged();
    listCategory.setAdapter(adapter);
}

Here is my view holder I use

public class CategoryViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

    public TextView category_name;
    public ImageView category_image;
    public LinearLayout category_layout;
    private ItemClickListener itemClickListener;
    public CategoryViewHolder(View itemView) {
        super(itemView);
        category_layout = itemView.findViewById(R.id.categoryaddquestion_layout);
        category_image = itemView.findViewById(R.id.category_image);
        category_name =  itemView.findViewById(R.id.category_name);
        itemView.setOnClickListener(this);
    }

    public void setItemClickListener(ItemClickListener itemClickListener) {
        this.itemClickListener = itemClickListener;
    }

    @Override
    public void onClick(View view) {
        itemClickListener.onClick(view,getAdapterPosition(),false);
    }

}

Create a variable in your adapter called SelectedPosition. On click, update that variable to the adapterPosition and reload the recyclerView.

Make a check in populateViewHolder saying:

if selectedPosition == position { 
   //highlighted
}
else {
  //set back to normal
}

here is my own solution.

@Override
        protected void populateViewHolder(CategoryViewHolder viewHolder, final 
Category model, int position) {

            viewHolder.category_name.setText(model.getName());
            if (position == Common.index) {
                viewHolder.category_layout.setSelected(true);
            } else {
                viewHolder.category_layout.setSelected(false);

            }



            viewHolder.setItemClickListener(new ItemClickListener() {
                @Override
                public void onClick(View view, int position, boolean isLongClick) {

                    Common.index = position;
                    adapter.notifyDataSetChanged();
                }
            });
        }
    };
    adapter.notifyDataSetChanged();
    listCategory.setAdapter(adapter);
}

I just used a Common java class and problem solved with a public static int index

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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