问题描述
我有一个使用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的自定义列表视图中使用单选按钮的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!