ListView和RadioButton的结合使用

ListView和RadioButton我提供两种思路

1.第一种方法的优点简单好理解,缺点是不能和ListView的item连动起来

2.第二种方法相对来说可能有点麻烦,但好用

第一种方法

public class MyAdapt extends BaseAdapter {

public MyAdapt(Activity activity,Context context,String[] str){
        this.context=context;
        this.adStr=str;
        this.activity=activity;
    }


@Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        Help help;
        if (view==null){
            help=new Help();
            view= LayoutInflater.from(context).inflate(R.layout.list_view_layout,null);

            help.tx=view.findViewById(R.id.te);
            help.Rb=view.findViewById(R.id.Rd);
            help.Rb.setChecked(false);
            view.setTag(help);
        }else {
            help=(Help) view.getTag();
        }
        help.tx.setText(adStr[i]);
        //设置id
        help.Rb.setId(i);
        help.Rb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {

                if (compoundButton.isChecked()){
                    if (temp!=-1){
                        RadioButton radioButton=activity.findViewById(temp);
                        if (radioButton!=null){
                            //将上次点击的按钮设为false
                            radioButton.setChecked(false);
                        }
                    }
                    //获取当前按钮的id
                    temp=compoundButton.getId();
                }
            }
        });
        if (i==temp){
            //设为true
            help.Rb.setChecked(true);
        }else {
            //设为false
            help.Rb.setChecked(false);
        }
        return view;
    }

class Help{
    TextView tx;
    RadioButton Rb;

}

上面为主要的代码,第一种方法主要在自定义适配器中进行编码

第二种处理方案

 自定义适配器

    private int selectID;
    private OnMyCheckChangedListener mCheckChange;

@Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        Help help;
        if (view==null){
            help=new Help();
            view= LayoutInflater.from(context).inflate(R.layout.list_view_layout,null);

            help.tx=view.findViewById(R.id.te);
            help.Rb=view.findViewById(R.id.Rd);
            help.Rb.setChecked(false);
            view.setTag(help);
        }else {
            help=(Help) view.getTag();
        }
        help.tx.setText(adStr[i]);

        //核心方法,判断单选按钮被按下的位置与之前的位置是否相等,然后做相应的操作。
        if (selectID == i) {
            help.Rb.setChecked(true);
        } else {
            help.Rb.setChecked(false);
        }
        // 单选按钮的点击事件监听
        help.Rb.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                //这一句的意思跟下面的一样,不过这个是itemClick的点击监听,而下面的是RadioButton的点击监听。
                selectID = i;
                /**
                 * 在MyListView中使用mListViewAdapter.setOncheckChanged
                 * 来监听RadioButton的点击事件,(当然,首先要判空)
                 * 当我们按下单选按钮时,我们把按下的item的位置赋值给selectID
                 * ,然后在上面的if语句中判断当前点击的位置与selectID的位置
                 * 是否相等,如果不相等,那么说明按下了新的位置,那么就把原来位置上的选择取消掉,
                 * 在新的位置让单选按钮显示选中状态就可以了。
                 */
                if (mCheckChange != null)
                    mCheckChange.setSelectID(selectID);
            }
        });
        return view;
    }

  // 自定义的选中方法
    public void setSelectID(int position) {
        selectID = position;
    }

    // 回调函数,很类似OnClickListener
    public void setOncheckChanged(OnMyCheckChangedListener l) {
        mCheckChange = l;
    }


    // 回調接口
    public interface OnMyCheckChangedListener {
        void setSelectID(int selectID);
    }


在主函数中的定义方案


        listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);//如果不使用这个设置,选项中的radiobutton无法响应选中事件
        listView.setOnItemClickListener(this);
        adapt.setOncheckChanged(new MyAdapt.OnMyCheckChangedListener() {
            @Override
            public void setSelectID(int selectID) {
                adapt.setSelectID(selectID);

                adapt.notifyDataSetChanged();
            }
        });



    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
        adapt.setSelectID(i);//选中位置
        adapt.notifyDataSetChanged();//刷新适配器
    }

 以上为两种方案,如还有其他方案,后续会进行补充

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值