Android 如何处理ExpandableListView中的单选按钮?
我有一个超过或等于2组的可扩展列表视图。在这些组中,很少有带有单选按钮的项目。因此,当我从一个组中选择一个单选按钮时,不应选择另一个组中的其他按钮 以下代码有助于使单选按钮作为单选组工作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
@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,我在其中存储组位置及其相关子位置。我已经更新了代码,请检查。如果你有任何其他问题,一定要问。