Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何处理ExpandableListView中的单选按钮?_Android_Listview_Radio Button_Expandablelistview_Expandablelistadapter - Fatal编程技术网

Android 如何处理ExpandableListView中的单选按钮?

Android 如何处理ExpandableListView中的单选按钮?,android,listview,radio-button,expandablelistview,expandablelistadapter,Android,Listview,Radio Button,Expandablelistview,Expandablelistadapter,我有一个超过或等于2组的可扩展列表视图。在这些组中,很少有带有单选按钮的项目。因此,当我从一个组中选择一个单选按钮时,不应选择另一个组中的其他按钮 以下代码有助于使单选按钮作为单选组工作 @Override public View getChildView(int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup par

我有一个超过或等于2组的可扩展列表视图。在这些组中,很少有带有单选按钮的项目。因此,当我从一个组中选择一个单选按钮时,不应选择另一个组中的其他按钮

以下代码有助于使单选按钮作为单选组工作

@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中为多个组实现这一点呢?

我早就找到了解决方案,但当时正忙于该项目,所以现在发布它,考虑到有人可以从中获得帮助

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

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

因此,最终代码如下:

Hashmap<Integer, Integer> mChildCheckStates = new Hashmap<>();

@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;
}
Hashmap mChildCheckStates=newhashmap();
@凌驾
公共视图getChildView(int groupPosition,final int childPosition,
布尔值isLastChild、视图转换视图、视图组父级){
最终AttributePOJO mItem=(AttributePOJO)getChild(groupPosition,childPosition);
String mGroup=(String)getGroup(groupPosition);
if(convertView==null){
LayoutInflater infalInflater=(LayoutInflater)this.mContext
.getSystemService(上下文布局\充气机\服务);
convertView=infalInflater.flate(R.layout.attribute\u expanable\u child\u item,null);
}
RadioButton mRadioButton=convertView.findViewById(R.id.radio_选项);
mRadioButton.setVisibility(View.VISIBLE);
试一试{
mRadioButton.setChecked(childPosition==mChildCheckStates.get(groupPosition));
}捕获(例外e){
e、 printStackTrace();
}
mRadioButton.setTag(childPosition);
mRadioButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
mChildCheckStates.put(groupPosition,(Integer)view.getTag());
notifyDataSetChanged();
}
});
返回视图;
}

就这样

我找到了解决方案,但当时正忙于项目,所以现在就发布,考虑到有人可以从中获得帮助

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

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

因此,最终代码如下:

Hashmap<Integer, Integer> mChildCheckStates = new Hashmap<>();

@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;
}
Hashmap mChildCheckStates=newhashmap();
@凌驾
公共视图getChildView(int groupPosition,final int childPosition,
布尔值isLastChild、视图转换视图、视图组父级){
最终AttributePOJO mItem=(AttributePOJO)getChild(groupPosition,childPosition);
String mGroup=(String)getGroup(groupPosition);
if(convertView==null){
LayoutInflater infalInflater=(LayoutInflater)this.mContext
.getSystemService(上下文布局\充气机\服务);
convertView=infalInflater.flate(R.layout.attribute\u expanable\u child\u item,null);
}
RadioButton mRadioButton=convertView.findViewById(R.id.radio_选项);
mRadioButton.setVisibility(View.VISIBLE);
试一试{
mRadioButton.setChecked(childPosition==mChildCheckStates.get(groupPosition));
}捕获(例外e){
e、 printStackTrace();
}
mRadioButton.setTag(childPosition);
mRadioButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
mChildCheckStates.put(groupPosition,(Integer)view.getTag());
notifyDataSetChanged();
}
});
返回视图;
}

就这样

请发布适配器的构造函数。请发布适配器的构造函数。什么是“mChildCheckStates”?Hello@AbhinayMe,这是一个hashmap,我在其中存储组位置及其相关子位置。我已经更新了代码,请检查。如果你还有其他问题,一定要问。什么是“mChildCheckStates”?Hello@AbhinayMe,这是一个hashmap,我在其中存储组位置及其相关子位置。我已经更新了代码,请检查。如果你有任何其他问题,一定要问。