在Android的自定义列表视图中使用单选按钮 [英] Using radio button in custom listview in Android

查看:158
本文介绍了在Android的自定义列表视图中使用单选按钮的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个使用getView完成的自定义列表视图.每行的右边必须是4个textview和一个单选按钮.我在这里看到了许多有关此的示例,但无法理解.这是我的getView函数.在这种情况下,我可以看到行,但是当我选择另一个单选按钮时仍会选中单选按钮.我应该在功能中添加些什么,以使单选按钮正常工作并获取所选按钮的ID?谢谢

I have a custom listview which is done with getView. It must be 4 textview and a radiobutton on the right in each row. I saw many examples about this here but couldn't get the idea. Here is my getView function. With this situation i can see the rows but radiobuttons are still checked when i choose another radiobutton. What should i have to add to the function to make radiobuttons work properly and get Id of the selected one? Thanks

private static class CitizenAdapter extends BaseAdapter {
         private LayoutInflater mInflater;
         public CitizenAdapter(Context context) {
                   mInflater = LayoutInflater.from(context);
                    }
         public int getCount() {
                    return sicilArr.size();
                    }
         public Object getItem(int position) {
                        return position;
                    }
         public long getItemId(int position) {
                        return position;
                    }       
         public View getView(final int position, View convertView, ViewGroup parent) {
                final ViewHolder holder;
                    if (convertView == null) {
                        convertView = mInflater.inflate(R.layout.table_row_citizen, null);
                        holder = new ViewHolder();
                        holder.text1 = (TextView) convertView.findViewById(R.id.TextView01);
                        holder.text2 = (TextView) convertView.findViewById(R.id.TextView02);
                        holder.text3 = (TextView) convertView.findViewById(R.id.TextView03);
                        holder.text4 = (TextView) convertView.findViewById(R.id.TextView04);
                        holder.radioCitizen = (RadioGroup) convertView.findViewById(R.id.radioGroupCitizen);
                        holder.radioButCitizen  = (RadioButton) convertView.findViewById(R.id.radioButtonCitizen);

                        holder.radioCitizen.setOnCheckedChangeListener(new OnCheckedChangeListener() {                              
                            @Override
                            public void onCheckedChanged(RadioGroup group, int checkedId) {

                            }
                        });
                        convertView.setTag(holder);
                    } else {
                        holder = (ViewHolder) convertView.getTag();
                    }       
                   holder.text1.setText(array1.get(position));
                   holder.text2.setText(array2.get(position));
                   holder.text3.setText(array3.get(position));  
                   holder.text4.setText(array4.get(position));


            return convertView;
           }        
             static class ViewHolder {      
                  TextView text1;
                  TextView text2;
                  TextView text3;
                  TextView text4;

                  RadioGroup radioCitizen;
                  RadioButton radioButCitizen;
                }       
            }       

这也是我的xml行文件:

Also this is my xml row file:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:gravity="left|center"
android:layout_width="wrap_content"
android:paddingBottom="10px"
android:paddingTop="10px"
android:paddingLeft="3px">    
 <TextView
    android:id="@+id/TextView01"
    android:layout_width="50dp"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:textSize="15dip"
    android:textStyle="bold"
    android:textColor="#d08021">
 </TextView>
<TextView
    android:id="@+id/TextView02"
    android:layout_width="120dp"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:textSize="15dip"
    android:textStyle="bold"
    android:textColor="#81A2BC">
 </TextView>
 <TextView
    android:id="@+id/TextView03"
    android:layout_width="120dp"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:textSize="15dip"
    android:textStyle="bold"
    android:textColor="#81A2BC">
 </TextView>    
 <TextView
    android:id="@+id/TextView04"
    android:layout_width="120dp"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:textSize="15dip"
    android:textStyle="bold"
    android:textColor="#81A2BC">
 </TextView> 
 <RadioGroup 
    android:id="@+id/radioGroupCitizen"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <RadioButton
                        android:id="@+id/radioButtonCitizen"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content" />
 </RadioGroup>

推荐答案

一种方法是手动取消选中所有其他单选按钮.您可以创建变量来保留当前选定项目的位置.在getView中,根据当前位置是否等于所选位置来选中/取消选中当前单选按钮.使用时,按单选按钮可以更改所选项目的位置并调用notifyDatasetChanged.
还要检查以下问题: Android ListView与singleChoice模式下的RadioButton和自定义行布局

One way is to manually uncheck all others radiobuttons. You can create variable that will keep position of currently selected item. And in getView you check/uncheck current radio button depending on whether current position equals to selected one. When use press radio button you change position of selected item and call notifyDatasetChanged.
Also check this quesion: Android ListView with RadioButton in singleChoice mode and a custom row layout

1)将private int selected = -1添加到CitizenAdapter.
2)将点击侦听器添加到每个单选按钮:

1) Add private int selected = -1 to CitizenAdapter.
2) Add click listener to each radiobutton:

holder.radioCitizen.setOnClickLisener(new View.OnClickListener() 
    {                              
        @Override
        public void onCheckedChanged(View view) {
            selected = (Integer) view.getTag();
            notifyDataSetChanged();
        }
    });

3)将每个单选按钮的标签设置为当前位置并设置检查状态:

3) Set tag for each radiobutton to current position and set checked state:

// After you set text to 4 textviews
holder.radioButCitizen.setTag(position);
holder.radioButCitizen.setChecked(position == selected);

这篇关于在Android的自定义列表视图中使用单选按钮的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆