【问题标题】:Add RadioButton inside RadioGroup in ListView在 ListView 的 RadioGroup 内添加 RadioButton
【发布时间】:2018-08-30 22:12:25
【问题描述】:

我一直在尝试在列表视图的单选组内添加单选按钮。 因此,如果我单击一个单选按钮,它会检查它,但如果我单击另一个单选按钮,它不会删除先前的选择。我是android的初学者,如果我做错了什么,请原谅我。

这是我的主要活动,我的电台组不在列表中

<LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:paddingTop="20dp">

            <RadioGroup
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/car_list_radio_group">

                <ListView
                    android:id="@+id/vehicle_list"
                    android:clickable="true"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"></ListView>

            </RadioGroup>

        </LinearLayout>

这是我对列表中每个项目的自定义视图

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:alwaysDrawnWithCache="true"
    android:backgroundTint="#ffffff">


    <RadioButton
        android:id="@+id/car_selected"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_centerVertical="true"
        android:buttonTint="@color/tesla_red"
        android:padding="10dp"
        android:text=""
        android:textColor="@android:color/white"
        android:textSize="16sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/vin"
        android:layout_width="183dp"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/car_selected"
        android:layout_marginStart="30dp"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:textColor="@android:color/white"
        android:textSize="12sp" />

</RelativeLayout>

这是我的列表适配器

private final class VehiclesAdapter extends BaseAdapter {

        LayoutInflater inflter;
        ArrayList<VehicleItem> vehiclesArray;

        public VehiclesAdapter(Context applicationContext, ArrayList<VehicleItem> items) {
            vehiclesArray = items;
            inflter = (LayoutInflater.from(applicationContext));
        }

        @Override
        public int getCount() {
            return vehiclesArray.size();
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            return Long.parseLong(vehiclesArray.get(position).getId());
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            VehicleHolder holder;
            VehicleItem vehicleItem = vehiclesArray.get(position);

            if (convertView == null) { // if convertView is null
                convertView = inflter.inflate(R.layout.vehicle_item, parent, false);

                holder = new VehicleHolder();
                holder.name = convertView.findViewById(R.id.car_selected);
                holder.vin = convertView.findViewById(R.id.vin);

                // initialize views
                convertView.setTag(holder);  // set tag on view
            } else {
                holder = (VehicleHolder) convertView.getTag();
                // if not null get tag
                // no need to initialize
            }

            if(vehicleItem.getId().equals(currentVehicle)){
                holder.name.setChecked(true);
            }

            holder.name.setText(vehicleItem.getName());
            holder.vin.setText(vehicleItem.getVin());

            //update views here
            return convertView;
        }
    }

如果您需要查看其他内容,请告诉我。

【问题讨论】:

    标签: java android listview android-radiogroup


    【解决方案1】:

    RadioGroup 是一个LinearLayout 并且意味着有RadioButton 孩子以便正确处理检查/取消检查。您必须删除它并自己从适配器处理检查/取消检查逻辑。

    【讨论】:

    • 您能否为您的解决方案提供更多指导?谢谢。
    • 您的自定义视图布局看起来不错,从您的 Activity 布局中删除 RadioGroup。您可以处理适配器类中的单击,当单击单选按钮时,除了刚刚单击视图的车辆(当前车辆)之外的所有车辆都将被取消选中。此外,一个不错的改进是使用 RecyclerView developer.android.com/guide/topics/ui/layout/recyclerview
    【解决方案2】:

    将此添加到您的 list_item.xml 您将在每一行中获得 radioGroup 并从 main_activity.xml 中删除 RadioGroup

    希望对你有帮助...

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:alwaysDrawnWithCache="true"
    android:backgroundTint="#ffffff">
    
    <RadioGroup
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/car_list_radio_group">
      <RadioButton
        android:id="@+id/car_selected"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_centerVertical="true"
        android:buttonTint="@color/tesla_red"
        android:padding="10dp"
        android:text=""
        android:textColor="@android:color/white"
        android:textSize="16sp"
        android:textStyle="bold" />
    
        <RadioButton
        android:id="@+id/car_not_selected"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_centerVertical="true"
        android:layout_torightof="@+id/car_selected" 
        android:buttonTint="@color/tesla_red"
        android:padding="10dp"
        android:text=""
        android:textColor="@android:color/white"
        android:textSize="16sp"
        android:textStyle="bold"
    </RadioGroup>
     <TextView
        android:id="@+id/vin"
        android:layout_width="183dp"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/car_selected"
        android:layout_marginStart="30dp"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:textColor="@android:color/white"
        android:textSize="12sp" />
    
     </RelativeLayout>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-27
      • 2017-03-22
      相关资源
      最近更新 更多