Нежелательный выбор пункта утилизации - PullRequest
0 голосов
/ 25 апреля 2019
viewHolder.optiontxt1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {


    viewHolder.optiontxt1.setCompoundDrawablesWithIntrinsicBounds(R.drawable.check, 0, 0, 0);
                    Log.e("position", "onClick: " + i);
                }
            });

это то, что я пытаюсь сделать на самом деле, есть 6 массивов, из которых я показываю данные для скрининга в первом массиве recyclerView для вопроса номер, второй - для вопроса, а остальные четыре - для четырех вариантов. но проблема в том, что когда я выбираю первый вариант первого вопроса, один из восьми вопросов выбирается автоматически

Ответы [ 2 ]

0 голосов
/ 25 апреля 2019

Recyclerview перерабатывает свои элементы.В вашем случае повторное рассмотрение повторного использования первого вопроса в восьмом вопросе.Это может быть любой вопрос.Мы должны обновить каждый элемент с его обновленным содержимым в onBindViewHolder.Что вы можете сделать, это сохранить массив для ответов.Когда пользователь нажимает на опцию, обновите массив ответов и вызовите notifyitemchanged для этой позиции.В onBindViewHolder выберите / отмените выбор параметров, проверив массив ответов.Вот фрагмент кода.

int[] answers = new int[getItemCount()];

@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
    /* check/uncheck options by checking the answer array */
    if(answers[position] == 1)  viewHolder.optiontxt1.setCompoundDrawablesWithIntrinsicBounds(R.drawable.check, 0, 0, 0);
    else  viewHolder.optiontxt1.setCompoundDrawablesWithIntrinsicBounds(R.drawable.uncheck, 0, 0, 0);

    if(answers[position] == 2)  viewHolder.optiontxt2.setCompoundDrawablesWithIntrinsicBounds(R.drawable.check, 0, 0, 0);
    else  viewHolder.optiontxt2.setCompoundDrawablesWithIntrinsicBounds(R.drawable.uncheck, 0, 0, 0);

    if(answers[position] == 3)  viewHolder.optiontxt3.setCompoundDrawablesWithIntrinsicBounds(R.drawable.check, 0, 0, 0);
    else  viewHolder.optiontxt3.setCompoundDrawablesWithIntrinsicBounds(R.drawable.uncheck, 0, 0, 0);

    if(answers[position] == 4)  viewHolder.optiontxt4.setCompoundDrawablesWithIntrinsicBounds(R.drawable.check, 0, 0, 0);
    else  viewHolder.optiontxt4.setCompoundDrawablesWithIntrinsicBounds(R.drawable.uncheck, 0, 0, 0);

    viewHolder.optiontxt1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            answers[position] = 1;
           notifyItemChanged(position);
        }
    });
0 голосов
/ 25 апреля 2019

recyclerview повторяет представление в OnBindViewHolder. Поэтому при нажатии items оно отражается в некоторых других positions.

Для лучшего понимания состояния выбора recyclerview см. этот пример

Надеюсь, это поможет вам.

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