如何在RecyclerView中选择一个项目?

时间:2019-07-09 17:39:40

标签: java android android-recyclerview

我试图用按钮制作一个RecyclerView,以便当用户单击一个按钮时,其他用户将被取消选择。如何实现呢?

我尝试搜索Google和StackOverflow,但是找不到我的案子的答案。

适配器

public class LocationAreaAdapter extends RecyclerView.Adapter<LocationAreaAdapter.ViewHolder> {

        private int mSelectedItem = -1;
        private ArrayList<String> mNames = new ArrayList<>();
        private Context mContext;



        public LocationAreaAdapter(Context context,ArrayList<String> mNames ){

            this.mContext=context;
            this.mNames=mNames;
        }

        @NonNull
        @Override
        public LocationAreaAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
            View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.locatin_area_cardview, viewGroup, false);
            return new LocationAreaAdapter.ViewHolder(view);
        }

        @Override
        public void onBindViewHolder(@NonNull ViewHolder holder, int i) {

            holder.name.setText(mNames.get(i));
            holder.name.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    holder.name.setTextColor(Color.WHITE);
                    holder.name.setBackgroundResource(R.drawable.clicked_button);
                    onClickedLocationArea =  mNames.get(i);
                    loadhostelList();

                }
            });


        }


        @Override
        public int getItemCount() {
            return mNames.size();
        }

        public class ViewHolder extends RecyclerView.ViewHolder {


            Button name;

            public ViewHolder(View itemView) {
                super(itemView);
                name = itemView.findViewById(R.id.location_area_button);

            }
        }

    }

能否请您告诉我有关我的案件的正确方法?

2 个答案:

答案 0 :(得分:0)

检查/选择状态已通过传递给ViewHolder的模型中的state属性正确实现。在这种情况下,让我解释一下您应该怎么做。 您有一个名为名称的字符串列表,您应该使用“名称”和“选定”状态创建名为User(或其他名称)的模型数据。并将其列表传递给适配器。 然后正确的绑定应该是将User实例传递给每个ViewHolder并相应地绑定信息。 在OnClick上,您将更改“已选择”状态,并且每次调用notifydatasetchanged都会更改。

之后,您甚至可以从适配器等中从数据中选择用户。

并且像@Bilal这样引用ViewHolder并不是一个好主意,因为ViewHolders正在重用。

答案 1 :(得分:0)

像这样在您的viewholder类中设置点击侦听器:

public class ViewHolder extends RecyclerView.ViewHolder {


    Button name, surname;

    public ViewHolder(View itemView) {
        super(itemView);
        name = itemView.findViewById(R.id.location_area_button);
        surname = itemView.findViewById(R.id.location_surname);

        name.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                surname.setEnabled(false);
                notifyItemChanged(getAdapterPosition());
            }
        });

        surname.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                name.setEnabled(false);
                notifyItemChanged(getAdapterPosition());
            }
        });
    }
}

我已将姓氏作为第二个按钮!