You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发:如何让RecyclerViewAdapter监听Spinner内置CheckBox选中状态

实现方案

你可以通过自定义回调接口的方式,将CheckBox的选中事件逐层传递到RecyclerViewAdapter中,修改步骤如下:


1. 新增状态变更回调接口

先定义专门用于通知选中状态变更的接口,放在你的Interface目录下:

namespace AndroidRegFirstApp.Interface
{
    public interface IOnAdditionCheckChangedListener
    {
        // 参数可根据你的业务需求自由调整
        void OnAdditionCheckChanged(ProductAddition changedItem, int spinnerItemPosition, bool isChecked);
    }
}

2. 修改自定义OnCheckedListener

给原有监听类新增回调参数,状态变更时同时触发回调:

namespace AndroidRegFirstApp.Interface
{
    public class OnCheckedListener : Java.Lang.Object, CompoundButton.IOnCheckedChangeListener
    {
        private List<ProductAddition> additions;
        private IOnAdditionCheckChangedListener mCallback;

        // 构造方法新增回调入参
        public OnCheckedListener(List<ProductAddition> list, IOnAdditionCheckChangedListener callback)
        {
            this.additions = list;
            this.mCallback = callback;
        }

        public void OnCheckedChanged(CompoundButton buttonView, bool isChecked)
        {
            int position = (int)buttonView.Tag;
            this.additions[position].Product_Addition_Selected = isChecked;
            // 触发上层回调
            mCallback?.OnAdditionCheckChanged(additions[position], position, isChecked);
        }
    }
}

3. 修改AdditionSpinnerAdapter

新增回调成员,构造方法接收回调后传递给OnCheckedListener:

namespace AndroidRegFirstApp.Adapter
{
    public class AdditionSpinnerAdapter : ArrayAdapter<ProductAddition>
    {
        private Context mContext;
        private List<ProductAddition> additions;
        // 新增回调成员
        private Interface.IOnAdditionCheckChangedListener mCheckCallback;
        
        // 构造方法新增回调入参
        public AdditionSpinnerAdapter(Context context, int resource, List<ProductAddition> objects, Interface.IOnAdditionCheckChangedListener callback) :base (context, resource, objects)
        {
            this.mContext = context;
            this.additions = objects;
            this.mCheckCallback = callback;
        }

        public override View GetDropDownView(int position, View convertView, ViewGroup parent)
        {
            return this.GetCustomView(position, convertView, parent);
        }

        public override View GetView(int position, View convertView, ViewGroup parent)
        {
            return this.GetCustomView(position, convertView, parent);
        }

        public View GetCustomView(int position, View convertView, ViewGroup parent)
        {
            LayoutInflater inflater = LayoutInflater.From(mContext);
            convertView = inflater.Inflate(Resource.Layout.additionSpinnerItem, null);

            TextView AdditionText = convertView.FindViewById<TextView>(Resource.Id.additionText);
            CheckBox AdditionSelected = convertView.FindViewById<CheckBox>(Resource.Id.additionSelected);

            AdditionText.Text = additions[position].Product_Addition_Name;
            AdditionSelected.Checked = additions[position].Product_Addition_Selected;

            AdditionSelected.Tag = position;

            if (position == 0)
            {
                AdditionSelected.Visibility = ViewStates.Gone;
            }
            // 给监听传入回调
            AdditionSelected.SetOnCheckedChangeListener(new Interface.OnCheckedListener(additions, mCheckCallback));

            return convertView;
        }
    }
}

4. 改造RecyclerViewAdapter接入回调

让你的RecyclerViewAdapter实现刚才定义的回调接口,初始化Spinner时传入自身即可:

// 让RecyclerViewAdapter实现回调接口
public class YourRecyclerViewAdapter : RecyclerView.Adapter, Interface.IOnAdditionCheckChangedListener
{
    // 你原有RecyclerViewAdapter的其他逻辑保持不变...

    // 实现回调方法,写你需要执行的业务逻辑
    public void OnAdditionCheckChanged(ProductAddition changedItem, int spinnerItemPosition, bool isChecked)
    {
        // 此处写你的业务代码:比如更新当前RecyclerViewItem状态、刷新列表、数据持久化等
    }

    // 修改原有Spinner初始化逻辑,多传入this作为回调
    private void InitSpinner(ViewHolder vh, CategoryProductAddition categoryProductAddition)
    {
        AdditionSpinnerAdapter adapter = new AdditionSpinnerAdapter(context, 0, categoryProductAddition.Product_Additions, this);
        vh.AdditionSpinner.Adapter = adapter;
    }
}

内容的提问来源于stack exchange,提问作者reven102

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 16:48:01