RecyclerView первый и последний элемент изменяются при нажатии только один - PullRequest
0 голосов
/ 06 мая 2018

Я использую обзор переработчика, чтобы отобразить список интересов, которые можно выбрать. При нажатии на самый первый элемент выбирается и самый последний элемент

Выбор первого элемента:

RecyclerView first item selected

Последний элемент также выбран:

RecyclerView last item selected

Выбор осуществляется с помощью этого кода:

@Override
public InterestViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    TextView v = (TextView) LayoutInflater.from(parent.getContext())
            .inflate(R.layout.interests_textview, parent, false);
    v.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            TextView textView = (TextView) v;
            if (textView.getCompoundDrawables()[2] == null) {
                textView.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.checkmark, 0);
            } else {
                textView.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
            }
        }
    });
    return new InterestViewHolder(v);
}

Также самый первый элемент также выбирается при нажатии на самый последний элемент. Кто знает, что может быть причиной этого?

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

У меня есть флажок для выбора элементов и следующих строковых массивов

данные: содержит все мои вещи checkData: содержит все отмеченные элементы

Чтобы решить эту проблему, попробуйте отредактировать onBindViewHolder (держатель, позиция)

 @Override
public void onBindViewHolder(@NonNull ProgrammminViewHolder holder, int position)
{

    String title =data[position];
    holder.textTitle.setText(title);

    //logic to solve first and last (multiple) selection issue
    CheckBox chk = holder.chk;
    String current  = data[position];
    chk.setChecked(false);
    for(String st : checkedData){
        if(st.equals(current)){
            chk.setChecked(true);
        }
    }

    holder.setItemClickListener(new ItemClickListener()
    {
        @Override
        public void onItemClick(View v, int pos)
        {
            //here analomay occured 19:36 Custom Reycler view CheckBoxes | anomaly is now cleared.
            CheckBox chk = (CheckBox) v;//.findViewById(R.id.chk);

            if(chk.isChecked())
            {
                   checkedData.add(data[pos]);
            }else if(!chk.isChecked())
            {
                checkedData.remove(data[pos]);
            }



        }
    });
}

Объяснение

То, что он будет делать, это каждый раз, когда данные связываются с держателем в onBindViewHolder, вы предварительно снимаете флажок и затем проверяете, присутствует ли соответствующая строка этого держателя в массиве checkedData, если да, установите для checkBox значение true.

0 голосов
/ 08 мая 2018

Вы надуваете макет в TextView. Измените его на View v, и оно должно работать:

View v = LayoutInflater.from(parent.getContext())
        .inflate(R.layout.interests_textview, parent, false);

Также вам нужно использовать findViewByID(), чтобы получить правильный TextView из вашего макета:

Вместо

TextView textView = (TextView) v;

Сделайте это:

TextView textView = findViewById(<id of your textview in the layout>);

Преобразование View в TextView - это не то, что вы хотите.

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