Android Firebase Recyclerview - Как отменить выбор предыдущего выбранного элемента? - PullRequest
0 голосов
/ 27 октября 2018

У меня простой вопрос.У меня есть обзор переработчика с элементами списка, и я могу выделить элементы, на которые вы нажимаете.Моя проблема в том, что я не знаю, как отменить выбор предыдущего элемента, по которому щелкнул пользователь, поэтому можно выбрать только 1 элемент.

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);
}

Вот мой держатель вида, который я использую

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);
    }

}

Ответы [ 2 ]

0 голосов
/ 28 октября 2018

вот мое собственное решение.

@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);
}

Я только что использовал общий Java-класс, и проблема решена с помощью открытого статического индекса int

0 голосов
/ 27 октября 2018

Создайте переменную в вашем адаптере с именем SelectedPosition. При щелчке обновите эту переменную до adapterPosition и перезагрузите recyclerView.

Сделайте проверку в populateViewHolder, сказав:

if selectedPosition == position { 
   //highlighted
}
else {
  //set back to normal
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...