0

我有一个列表,每一行都有一个单选按钮。我正在使用以下代码在它们之间切换(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....下移(这样 option1 不再出现在屏幕上)....上移(option1 再次可见)...选择 option2(或任何其他从第一个)现在第一个选项不会被取消选择..

要取消选择 option1,我必须单击它两次。

仅供参考,我已经尝试了由于 IllegalSateException 而不起作用的 performClick() 方法。

4

1 回答 1

0

每次getView()被称为你膨胀一个新的视图。这个方法被调用了很多!您不能依赖在视图中存储/保存单选按钮的状态。当用户单击单选按钮时,您需要将此信息保存为数据的一部分,而不是在视图中。然后,getView()您需要根据数据中保存的信息设置单选按钮的状态

于 2013-10-30T16:54:35.033 回答