我有一个列表,每行都有一个单选按钮。我正在使用以下代码在它们之间切换(TEMP是一个静态变量,用于跟踪已选择的元素,因此当listview刷新视图时我可以再次选择它):
public void onClickRadioButton(View view) {
final int position = listView.getPositionForView(view);
View rowElement = ((View) view.getParent());
// uncheck previous checked button.
if (listRadioButton != null)
listRadioButton.setChecked(false);
// assign to the variable the new one
listRadioButton = (RadioButton) view;
// find if the new one is checked or not, and set "listIndex"
if (listRadioButton.isChecked()) {
listIndex = ((ListView) rowElement.getParent())
.getPositionForView(rowElement);
TEMP = listIndex;
} else {
listRadioButton = null;
listIndex = -1;
TEMP = listIndex;
}
System.out.println("list index : " + listIndex);
}
enter code here
这是适配器类的getView方法:
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.manage_parameter_list_element,
parent, false);
TextView textView = (TextView) rowView
.findViewById(R.id.parameter_textView);
textView.setText("something");
TextView textView2 = (TextView) rowView
.findViewById(R.id.parameter_range_textView);
textView2.setText("something more");
if(position == SelectParameterActivity.TEMP)
// SelectParameterActivity is the class whose code I've written above
{
((RadioButton) rowView.findViewById(R.id.parameter_radioButton))
.performClick();
}
return rowView;
}
在正常情况下,单选按钮之间切换正常
现在的问题是,考虑这种情况: 我选择option1 ....向下移动(这样选项1不再出现在屏幕上)....向上移动(选项1再次可见)...选择选项2(或除了第一个之外的任何其他选项) 现在第一个选项没有被取消选择..
要取消选择option1,我必须再点击两次。
仅供参考我尝试过由于IllegalSateException而无效的performClick()方法。
答案 0 :(得分:0)
每次调用getView()
时,都会为新视图充气。这个方法被大量调用!您不能依赖于在视图中存储/保存单选按钮的状态。当用户点击单选按钮时,您需要将此信息保存为数据的一部分,而不是在视图中。然后,在getView()
中,您需要根据您在数据中保存的信息设置单选按钮的状态。