recyclerview.adapter重置单选按钮 [英] recyclerview.adapter resets radio-buttons

查看:172
本文介绍了recyclerview.adapter重置单选按钮的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的问题: https://youtu.be/k-N5uthYhYw

这是我的onBindViewHolder()方法.

and this is my onBindViewHolder() method.

// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
    // - get element from your dataset at this position
    // - replace the contents of the view with that element

    holder.specName.setText(specList.get(position).getSpecName());

    // Assign a tag number to later identify what radio-button
    holder.specRadioBtn.setTag(new Integer(position));

    /* Event listenr for longClick - we prob. won't use it, but it's here just in case */
    holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {

            Toast.makeText(context, "Long press", Toast.LENGTH_SHORT).show();

            return false;
        }
    });

    /* Little hack to select its Radio Button when a specific row is tapped */
    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            // Turn rowSelectedFlag to true since the user selected this row
            rowSelectedFlag = true;

            // When the user taps on a row select that row's radio button
            holder.specRadioBtn.setChecked(true);

            // I'm not sure why, but locally the interface needs to be started by pointing it
            // to where it should drive the data (to send the params)
            tempInterface = new AdminUserSpecialty();

            // Call the interface to send the data (row spec-name and id) back to AdminUserSpecialty
            tempInterface.activateSpecSelect(specList.get(position).getSpecName().toString(),
                    specList.get(position).getSpecId().toString(), rowSelectedFlag);

            int clickedPos = ((Integer) holder.specRadioBtn.getTag());

            // Check if the radio button is already selected
            if (holder.specRadioBtn.isChecked()) {

                if (lastCheckedBtn != null) {

                    // Don't deselect if user taps on the same row several times
                    if (lastCheckedBtn == holder.specRadioBtn) {

                        // do nothing
                    }

                    // Otherwise do deselect the previously selected radio button
                    else {

                        lastCheckedBtn.setChecked(false);
                    }
                }

                lastCheckedBtn = holder.specRadioBtn;
                lastCheckedPos = clickedPos;
            }

            // If radio is not checked set the lastCheckedBtn to null (reset counter)
            else {
                lastCheckedBtn = null;
            }
        }
    });

    /* ----------------------------------------------------------------------*/


}

我似乎无法将我的单选按钮选择保留在RecyclerView滚动条上.滚动时,选择变得不稳定且随机.我知道RecyclerView的功能之一是在行离开屏幕时对其进行回收,但是我该怎么做才能保持选择呢?非常感谢.

I can't seem to preserve my radio-button selection on RecyclerView scroll. On scroll the selection becomes erratic and random. I understand that one of RecyclerView's features is to recycle rows as they leave the screen, but what do I need to do to keep my selection? Thanks much.

推荐答案

保存单选按钮的选中/未选中状态(您应使用

Save the checked / unchecked status of the radio button (you should use checkbox instead if you want to allow the user to select multiple items) to your model (i.e. your items in the list should have a field for this) when the onClick event happens. When you bind the ViewHolder, make sure you set checkbox's value to whatever you saved in your model.

这篇关于recyclerview.adapter重置单选按钮的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆