我有一个使用getView完成的自定义列表视图。它必须是4 textview和每行右侧的radiobutton。我在这里看到了很多这方面的例子,但是无法理解。这是我的getView函数。在这种情况下,我可以看到行,但是当我选择另一个单选按钮时仍然会检查无线电按钮。我应该添加什么功能,使radiobuttons正常工作,并获得所选的Id?感谢
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行文件:
<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>
答案 0 :(得分:7)
一种方法是手动取消选中所有其他单选按钮。您可以创建将保持当前所选项目位置的变量。在getView
中,根据当前位置是否等于所选位置,检查/取消选中当前单选按钮。使用时按下单选按钮可更改所选项目的位置并致电notifyDatasetChanged
另请查看此问题:Android ListView with RadioButton in singleChoice mode and a custom row layout
1)将private int selected = -1
添加到CitizenAdapter
2)为每个单选按钮添加点击监听器:
holder.radioCitizen.setOnClickLisener(new View.OnClickListener()
{
@Override
public void onCheckedChanged(View view) {
selected = (Integer) view.getTag();
notifyDataSetChanged();
}
});
3)将每个radiobutton的标签设置为当前位置并设置检查状态:
// After you set text to 4 textviews
holder.radioButCitizen.setTag(position);
holder.radioButCitizen.setChecked(position == selected);
答案 1 :(得分:0)
int selected = 0;
@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
// TODO Auto-generated method stub
ViewHolder holder;
final RadioButton motif;
if (null == convertView)
{
convertView = View
.inflate(parent.getContext(), R.layout.motif_item, null);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
}
holder = (ViewHolder) convertView.getTag();
motif = (RadioButton) holder.getmotif();
motif.setTag(position);
motif.setText(motifList.get(position));
if(position == 0)
{
motif.setChecked(true);
}
else
motif.setChecked(false);
motif.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
selected = position;
notifyDataSetChanged();
}
});
if(position == selected)
motif.setChecked(true);
else
motif.setChecked(false);
return convertView;
}
private class ViewHolder {
private View mRow;
private RadioButton motif = null;
public ViewHolder(View row) {
mRow = row;
}
public RadioButton getmotif() {
if (motif == null) {
motif = (RadioButton) mRow.findViewById(R.id.itemMotif);
}
return motif;
}
}