Android 单选按钮更改分区Listview滚动条上的状态

Android 单选按钮更改分区Listview滚动条上的状态,android,listview,adapter,Android,Listview,Adapter,我正在应用程序中使用分段列表视图 在ListView的行中,我有TextView和RadioGroup. 因此,当我点击单选按钮时,它通常会被点击并正常工作。 但当我点击并滚动视图时,所选视图也会显示 消失而不受控制 这就是我正在使用的XML <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" a

我正在应用程序中使用
分段列表视图
ListView
的行中,我有
TextView
RadioGroup.
因此,当我点击单选按钮时,它通常会被点击并正常工作。 但当我点击并滚动视图时,所选视图也会显示 消失而不受控制

这就是我正在使用的XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relativelay"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/list_bg" >

    <TextView
        android:id="@+id/tvname"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:maxLines="1"
        android:padding="10dp"
        android:textColor="#000000"
        android:textSize="18dp"
        android:textStyle="bold" />

    <RadioGroup
        android:id="@+id/radioGroup1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:orientation="horizontal" >

        <RadioButton
            android:id="@+id/check_present"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_marginRight="20dp"
            android:onClick="onPresentClick" />

        <RadioButton
            android:id="@+id/check_absent"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toLeftOf="@id/check_present"
            android:onClick="onPresentClick" />
    </RadioGroup>

</RelativeLayout>

您应该维护/保留“选中”单选按钮的状态,以便在上下滚动时保持选中状态,因为在上下滚动列表视图时,列表适配器会重新创建每个列表项/视图

您应该通过在单选按钮上设置listener来保留选中单选按钮的位置/索引

您可以使用hashMap将列表项作为s键保存,并将“已检查”状态作为值保存。 当用户选中该框时,将键值添加到地图,当用户取消选中该框时,从地图中删除键值

在渲染列表视图中使用此贴图。代码如下:

private Map<Integer, Boolean> map =  new HashMap<Integer, Boolean>();    

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

     Boolean present = map.get(position);
     if(present != null && present.booleanValue()){
       // set present checkbox selected
     } else {
       // set absent checkbox selected
     }

    holderName.radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
       public void onCheckedChanged(RadioGroup group, int checkedId) {
               switch (checkedId) {
                   case R.id.check_absent:
                        map.put(position, false)
                        break;
                   case R.id.check_present:
                        map.put(position, true)
                        break;
               }
      }
   });
}
private Map=new HashMap();
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
布尔值present=map.get(位置);
if(present!=null&&present.booleanValue(){
//选中“设置当前”复选框
}否则{
//选中“设置缺席”复选框
}
holderName.radioGroup.setOnCheckedChangeListener(新的OnCheckedChangeListener(){
检查更改后的公共无效(RadioGroup组,int checkedId){
开关(检查EDID){
案例R.id.检查不存在:
地图放置(位置,错误)
打破
案例R.id.检查是否存在:
地图放置(位置,真)
打破
}
}
});
}

如果你不能理解我的观点,请告诉我,这样我可以为你发布代码Yes@Rakesh Bhalani我理解你的观点。。让我再试一次,如果我找不到解决办法,我会请求你的帮助。。感谢您提供解决方案的提示…我使用了您的代码,但无法解决该问题。。这对我不起作用。请帮帮我。。从昨天开始,我正在尽我最大的努力解决这个问题……@RakeshBhalani。。我已经更新了代码。请看一看。。否则我可以做一件事,我可以把代码寄给你,这样你就可以运行它,知道我哪里做错了。感谢您的回复和帮助您在listener的切换框中为当前和缺席输入“true”,请在地图中为当前和缺席输入“false”。
private Map<Integer, Boolean> map =  new HashMap<Integer, Boolean>();    

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

     Boolean present = map.get(position);
     if(present != null && present.booleanValue()){
       // set present checkbox selected
     } else {
       // set absent checkbox selected
     }

    holderName.radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
       public void onCheckedChanged(RadioGroup group, int checkedId) {
               switch (checkedId) {
                   case R.id.check_absent:
                        map.put(position, false)
                        break;
                   case R.id.check_present:
                        map.put(position, true)
                        break;
               }
      }
   });
}