Как выбрать один элемент в RecyclerView? - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь сделать 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 голосов
/ 10 июля 2019

Установите прослушиватель кликов внутри класса виджета следующим образом:

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

Я взял фамилию в качестве второй кнопки !!

0 голосов
/ 09 июля 2019

Статус проверки / выбора правильно реализован с помощью атрибута состояния внутри модели, который передается в ViewHolder. Позвольте мне объяснить в этом случае, что вы должны делать. У вас есть список строк с именами, вы должны создать данные модели с именем пользователя (или что-то еще) со статусом «имя» и «выбранный». И передайте список этого адаптеру. Тогда правильное связывание должно быть таким, чтобы вы передавали экземпляр User каждому ViewHolder и соответственно связывали информацию. На клике вы будете менять «выбранное» состояние и каждый раз сообщать об изменении уведомлений.

После того, как вы сможете получить выбранного пользователя из данных даже из вашего адаптера и т. Д.

И ссылка на ViewHolder, как, например, @Bilal, не является хорошей идеей, поскольку ViewHolders используется повторно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...