如何在ExpandableListView中处理单选按钮?

时间:2018-04-30 18:51:17

标签: android listview radio-button expandablelistview expandablelistadapter

我有一个包含大于或等于2组的ExpandableListView。在这些组中,几乎没有带单选按钮的项目。因此,当我从一个组中选择一个单选按钮时,不应选择其他组中的其他按钮。

以下代码有助于将单选按钮用作无线电组。

@Override
public View getChildView(int groupPosition, final int childPosition,
                         boolean isLastChild, View convertView, ViewGroup parent) {

    if (convertView == null) {
        LayoutInflater infalInflater = (LayoutInflater) this.mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.attribute_expanable_child_item, null);
    }

    RadioButton mRadioButton = convertView.findViewById(R.id.radio_option);
    mRadioButton.setVisibility(View.VISIBLE);
    mRadioButton.setText(mItem.getAttributeName());

    mRadioButton.setChecked(childPosition == selectedPosition);
    mRadioButton.setTag(childPosition);

    mRadioButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            selectedPosition = (Integer) view.getTag();
            notifyDataSetChanged();
        }
    });
}

现在,如果我从一个组中选择一个项目,则从另一个组中选择另一个项目在同一位置!我知道我应该将所选位置保存在一个数组中,但我没有得到如何。 那么,我应该怎么做才能在ExpandableListView中为多个组实现这个目标?

1 个答案:

答案 0 :(得分:1)

我找到了解决方案的方法,但是正忙于项目,所以现在发布,考虑有人可以从中得到帮助!

为了在可扩展ListView中保持与特定组相对应的选定位置,我必须保存该位置!所以我用HashMap保存了它。

因此,在hashmap的第一个参数中,我存储了组位置和第二个视图的ID。并在填充可扩展的子项时设置它。

所以最终代码如下:

@Override
public View getChildView(int groupPosition, final int childPosition,
                         boolean isLastChild, View convertView, ViewGroup parent) {

    final AttributePOJO mItem = (AttributePOJO) getChild(groupPosition, childPosition);
    String mGroup = (String) getGroup(groupPosition);

    if (convertView == null) {
        LayoutInflater infalInflater = (LayoutInflater) this.mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.attribute_expanable_child_item, null);
    }

    RadioButton mRadioButton = convertView.findViewById(R.id.radio_option);
    mRadioButton.setVisibility(View.VISIBLE);

    try {
        mRadioButton.setChecked(childPosition == mChildCheckStates.get(groupPosition));

    }catch (Exception e){
        e.printStackTrace();
    }
    mRadioButton.setTag(childPosition);

    mRadioButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            mChildCheckStates.put(groupPosition, (Integer) view.getTag());
            notifyDataSetChanged();
        }
    });

    return convertView;
}

就是这样!