包含单选按钮的ListView在Android中无法正确刷新

时间:2013-10-30 15:52:28

标签: android android-listview radio-button

我有一个列表,每行都有一个单选按钮。我正在使用以下代码在它们之间切换(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()方法。

1 个答案:

答案 0 :(得分:0)

每次调用getView()时,都会为新视图充气。这个方法被大量调用!您不能依赖于在视图中存储/保存单选按钮的状态。当用户点击单选按钮时,您需要将此信息保存为数据的一部分,而不是在视图中。然后,在getView()中,您需要根据您在数据中保存的信息设置单选按钮的状态。