【发布时间】:2015-03-02 19:39:45
【问题描述】:
我有 25 个问题,每个问题都有 4 个选项(只有 4 个单选按钮)在 listview 中的四个选项中进行选择。我正在准确地获得选定的位置和他们的单选 ID,但我无法在 arraylist 中使用单选 ID 保持他们的位置。并且另一个问题是当列表视图滚动时,选中的单选按钮放错了位置。请在下面帮助我。
提前致谢!
这是我的适配器类,请查看。
公共类 CustomListAdapter 扩展 BaseAdapter {
private Integer[] listData;
int selectedPosition = -1;
private LayoutInflater mInflater;
public CustomListAdapter(Context context, Integer[] listData) {
super();
this.listData = listData;
mInflater = LayoutInflater.from(context);
validdata = new ArrayList<String>();
int size = values.length;
Log.d("size", "" + size);
for (int i = 0; i < size; i++) {
checked.add(false);
validdata.add("");
checkeddata.add("");
}
}
@Override
public int getCount() {
return listData.length;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
public View getView(final int position, View convertView,
ViewGroup parent) {
final ViewHolder holder;
View view = convertView;
if (view == null) {
view = mInflater.inflate(R.layout.items, null);
holder = new ViewHolder();
holder.headlineView = (TextView) view
.findViewById(R.id.textview1);
holder.r1 = (RadioButton) view.findViewById(R.id.radio0);
holder.r2 = (RadioButton) view.findViewById(R.id.radio1);
holder.r3 = (RadioButton) view.findViewById(R.id.radio2);
holder.r4 = (RadioButton) view.findViewById(R.id.radio3);
holder.rp = (RadioGroup) view.findViewById(R.id.rgOpinion);
holder.rp.setTag(position);
view.setTag(holder);
holder.rp
.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(RadioGroup group,
int checkedId) {
// TODO Auto-generated method stub
View radioButton = group
.findViewById(checkedId);
final String radioId = String.valueOf(group
.indexOfChild(radioButton));
final int radio = group
.indexOfChild(radioButton);
String radioid;
Log.d("radioid", "" + radioId);
if (holder.r1.isChecked()) {
holder.r1
.setChecked(position == selectedPosition);
holder.r1.setTag(position);
holder.r1.setChecked(true);
holder.r1
.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
selectedPosition = (Integer) view
.getTag();
notifyDataSetChanged();
Log.d("selectesxsxad", ""
+ selectedPosition);
String s = listData[selectedPosition]
.toString();
checked.add(
selectedPosition,
true);
Log.d("valid", "" + checked);
}
});
radioid = "A";
} else if (holder.r2.isChecked()) {
holder.r2
.setChecked(position == selectedPosition);
holder.r2.setTag(position);
holder.r2.setChecked(true);
holder.r2
.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
selectedPosition = (Integer) view
.getTag();
notifyDataSetChanged();
Log.d("selectesxsxad", ""
+ selectedPosition);
validdata.add(
selectedPosition,
radioId);
Log.d("valid", ""
+ validdata);
}
});
radioid = "B";
} else if (holder.r3.isChecked()) {
holder.r3
.setChecked(position == selectedPosition);
holder.r3.setTag(position);
holder.r3.setChecked(true);
holder.r3
.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
selectedPosition = (Integer) view
.getTag();
notifyDataSetChanged();
Log.d("selectesxsxad", ""
+ selectedPosition);
validdata.add(
selectedPosition,
radioId);
Log.d("valid", ""
+ validdata);
}
});
radioid = "C";
} else if (holder.r4.isChecked()) {
holder.r4
.setChecked(position == selectedPosition);
holder.r4.setTag(position);
holder.r4.setChecked(true);
holder.r4
.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
selectedPosition = (Integer) view
.getTag();
notifyDataSetChanged();
Log.d("selectesxsxad", ""
+ selectedPosition);
validdata.add(
selectedPosition,
radioId);
Log.d("valid", ""
+ validdata);
}
});
radioid = "D";
}
}
});
} else {
holder = (ViewHolder) view.getTag();
}
holder.rp = (RadioGroup) view.findViewById(R.id.rgOpinion);
holder.r1 = (RadioButton) view.findViewById(R.id.radio0);
holder.r2 = (RadioButton) view.findViewById(R.id.radio1);
holder.r3 = (RadioButton) view.findViewById(R.id.radio2);
holder.r4 = (RadioButton) view.findViewById(R.id.radio3);
holder.headlineView.setText(listData[position].toString());
holder.r1.getTag(position);
if (holder.r1.isChecked()) {
holder.r1.setChecked(true);
} else if (holder.r2.isChecked()) {
holder.r2.setChecked(true);
} else if (holder.r3.isChecked()) {
holder.r3.setChecked(true);
} else if (holder.r4.isChecked()) {
holder.r4.setChecked(true);
}
return view;
}
public class ViewHolder {
TextView headlineView;
RadioGroup rp;
RadioButton r1, r2, r3, r4;
}
【问题讨论】:
-
在一个带有位置的数组列表中保持状态
-
我无法说明它们。你能举个例子吗..@komal gundavarpu
标签: android listview radio-button