Android RecyclerView配合RadioButton实现多个条目单选

前言:最近做项目,做到一个需求是调查问卷的模块,因为不知道题目的数量和选项的数量,所以单选的地方需要RecyclerView配合RadioButton来展示数据,下面我们就来实现以下这个功能;

我的由于特殊需求是RecyclerView嵌套的RecyclerView,主要

功能逻辑代码都在SecondAdapter里面

废话不多说,老规矩,先上效果图


先贴上布局代码

1.主布局:activity_main

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.administrator.myapplication.MainActivity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/rv_test"
        android:layout_gravity="center_horizontal"
        android:layout_width="325dp"
        android:layout_height="wrap_content">

    </android.support.v7.widget.RecyclerView>

</LinearLayout>

2.子条目布局:layout_radio

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:orientation="vertical"
    android:layout_height="wrap_content">
    <!--单项选择-->
    <TextView
        android:id="@+id/tv_question_radio"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="12dp"
        android:text="获取题目中..."
        android:textSize="14sp"
        android:textStyle="bold" />

    <android.support.v7.widget.RecyclerView
        android:id="@+id/rv_question_radio"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="12dp"></android.support.v7.widget.RecyclerView>

    <View
        android:background="#dddddd"
        android:layout_marginTop="12dp"
        android:layout_width="match_parent"
        android:layout_height="0.5dp"/>
</LinearLayout>

3.子选项布局:item_radio

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:orientation="horizontal"
    android:layout_marginTop="18dp"
    android:layout_height="wrap_content">
    <!--单选-->
    <RadioButton
        android:id="@+id/rb_question_item"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:text="获取选项中"
        android:id="@+id/tv_question_item"
        android:layout_marginLeft="9dp"
        android:textSize="13sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

4.主布局代码:MainActivity

package com.example.administrator.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;

import com.example.administrator.myapplication.adapter.FirstAdapter;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private RecyclerView rv_test;
    private ArrayList<String> firstList = new ArrayList<>();
    private ArrayList<String> secondList = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //条目模拟数据
        firstList.add("1.单选:你是谁");
        firstList.add("2.单选:你是谁");
        firstList.add("3.单选:你是谁");
        firstList.add("4.单选:你是谁");
        firstList.add("5.单选:你是谁");
        //选项模拟数据
        secondList.add("选项A");
        secondList.add("选项B");
        secondList.add("选项C");
        secondList.add("选项D");
        secondList.add("选项E");
        rv_test = findViewById(R.id.rv_test);
        //RecyclerView适配器
        rv_test.setLayoutManager(new LinearLayoutManager(MainActivity.this,LinearLayoutManager.VERTICAL,false));
        FirstAdapter firstAdapter = new FirstAdapter(MainActivity.this,firstList,secondList);
        rv_test.setAdapter(firstAdapter);
    }
}

5.展示题目适配器:FirstAdapter

package com.example.administrator.myapplication.adapter;

import android.content.Context;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.example.administrator.myapplication.R;

import java.util.ArrayList;

/**
 * Created by Administrator on 2018/3/23.
 */

public class FirstAdapter extends RecyclerView.Adapter<FirstAdapter.MyViewHolder> {

    private Context context;
    private ArrayList<String> firstList;
    private ArrayList<String> secondList;

    public FirstAdapter(Context context, ArrayList<String> firstList, ArrayList<String> secondList) {
        this.context = context;
        this.firstList = firstList;
        this.secondList = secondList;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View inflate = LayoutInflater.from(context).inflate(R.layout.layout_radio, null);
        MyViewHolder myViewHolder = new MyViewHolder(inflate);
        return myViewHolder;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        holder.tv_question_radio.setText(firstList.get(position));
        //RecyclerView嵌套
        holder.rv_question_radio.setLayoutManager(new GridLayoutManager(context,2, LinearLayoutManager.VERTICAL,false));
        holder.rv_question_radio.setAdapter(new SecondAdapter(context,secondList));
    }

    @Override
    public int getItemCount() {
        return firstList.size();
    }

    class MyViewHolder extends RecyclerView.ViewHolder{
        TextView tv_question_radio;
        RecyclerView rv_question_radio;
        public MyViewHolder(View itemView) {
            super(itemView);
            tv_question_radio = itemView.findViewById(R.id.tv_question_radio);
            rv_question_radio = itemView.findViewById(R.id.rv_question_radio);
        }
    }

}

6.子选项适配器:SecondAdapter

package com.example.administrator.myapplication.adapter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CompoundButton;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.Toast;

import com.example.administrator.myapplication.R;

import java.util.ArrayList;

/**
 * Created by Administrator on 2018/3/23.
 */

public class SecondAdapter extends RecyclerView.Adapter<SecondAdapter.MyViewHolder> {

    private Context context;
    private ArrayList<String> secondList;
    private int index = -1;//标记当前选择的选项

    public SecondAdapter(Context context, ArrayList<String> secondList) {
        this.context = context;
        this.secondList = secondList;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View inflate = LayoutInflater.from(context).inflate(R.layout.item_radio, null);
        MyViewHolder myViewHolder = new MyViewHolder(inflate);
        return myViewHolder;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, final int position) {
        holder.tv_question_item.setText(secondList.get(position));
        holder.rb_question_item.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(isChecked){
                    Toast.makeText(context,"你选择的选项是"+secondList.get(position),Toast.LENGTH_SHORT).show();
                    index = position;
                    notifyDataSetChanged();
                }
            }
        });
        if(index==position){
            holder.rb_question_item.setChecked(true);
        } else {
            holder.rb_question_item.setChecked(false);
        }
    }

    @Override
    public int getItemCount() {
        return secondList.size();
    }

    class MyViewHolder extends RecyclerView.ViewHolder{
        RadioButton rb_question_item;
        TextView tv_question_item;
        public MyViewHolder(View itemView) {
            super(itemView);
            rb_question_item = itemView.findViewById(R.id.rb_question_item);
            tv_question_item = itemView.findViewById(R.id.tv_question_item);
        }
    }

}

7.好了,到这里我们的小Demo就已经完成了,复制即可用,阅读即可懂


得意得意得意



用起来如果有瑕疵的话可以参考另一个逻辑

Android RecyclerView中使用CheckBox勾选实现单选功能





  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
实现多个Radiobutton单选按钮),可以使用Tkinter中的`Radiobutton`组件。以下是一个简单的示例,演示如何创建多个Radiobutton实现单选的功能: ```python from tkinter import Tk, Radiobutton, StringVar # 创建窗口 window = Tk() # 创建StringVar变量来存储选中的值 selected_value = StringVar() # 创建Radiobutton并设置不同的值和文本 option1 = Radiobutton(window, text="Option 1", value="Option 1", variable=selected_value) option2 = Radiobutton(window, text="Option 2", value="Option 2", variable=selected_value) option3 = Radiobutton(window, text="Option 3", value="Option 3", variable=selected_value) # 将Radiobutton放置在窗口中 option1.pack() option2.pack() option3.pack() # 运行窗口 window.mainloop() ``` 在这个示例中,我们首先创建了一个StringVar变量`selected_value`来存储选中的值。然后,我们创建了三个Radiobutton,分别对应三个选项。每个Radiobutton都设置了不同的文本和值,并指定了`selected_value`作为它们的变量(通过`variable`参数)。 当用户选择其中一个Radiobutton时,其对应的值会被存储在`selected_value`变量中。 最后,我们使用`pack()`方法将三个Radiobutton放置在窗口中。 通过这种方式,您可以实现多个Radiobutton单选功能。当用户选择其中一个选项时,其他选项将自动取消选中。您可以使用`selected_value.get()`方法获取当前选中的值。 希望这可以帮助您实现多个Radiobutton单选功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值