繁体   English   中英

在一组可展开列表视图中插入RadioButton

[英]Insert RadioButton in a group of an Expandable List View

我有一些包含RadioButton的组的可扩展列表视图。

问题在于,只能同时启用这些RadioButton中的一个,但是现在我可以选择所有这些。

这是实现的适配器的代码

public class ActionPlanExpandableListAdapter extends BaseExpandableListAdapter {

    private Context context;
    private ArrayList<ActionPlan> listActionPlan;
    private Map<ActionPlan,ArrayList<Contact>> mapChild;

    public ActionPlanExpandableListAdapter(Context context, ArrayList<ActionPlan> listActionPlan, Map<ActionPlan, ArrayList<Contact>> mapChild) {
        this.context = context;
        this.listActionPlan = listActionPlan;
        this.mapChild = mapChild;
    }

    ...

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {

        String groupTitle = context.getString(R.string.actionPlanGroupHeader) + (groupPosition+1);
        if (convertView == null) {
            convertView = LayoutInflater.from(context).inflate(R.layout.action_plan_alarm_expandable_group, null);
        }
        TextView tvGroup = (TextView) convertView.findViewById(R.id.tvAlertName);
        tvGroup.setText(groupTitle);

        RadioButton selectGroup = (RadioButton)convertView.findViewById(R.id.rbSelectActionPlan);
        selectGroup.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

            }
        });

        return convertView;
    }

    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        Contact contact = getChild(groupPosition,childPosition);
        String item = contact.getName();
        convertView = LayoutInflater.from(context).inflate(R.layout.action_plan_alarm_expandable_child, null);

        TextView contactName = (TextView) convertView.findViewById(R.id.tvContactName);
        TextView contactRelationship = (TextView) convertView.findViewById(R.id.tvContactRelationship);
        TextView contactPhoneNumber = (TextView) convertView.findViewById(R.id.tvContactPhoneNumber);

        contactName.setText(contact.getName());
        contactRelationship.setText(contact.getRelationship());
        contactPhoneNumber.setText(Integer.toString(contact.getPhoneNumber1()) + ", " + Integer.toString(contact.getPhoneNumber2()) + ", " + Integer.toString(contact.getPhoneNumber3()));

        return convertView;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return false;
    }

}

也许您只有不好的适配器实现

尝试这样的事情

getGroupView { ... RadioButton selectGroup =(RadioButton)convertView.findViewById(R.id.rbSelectActionPlan); selectGroup.setChecked(isExpanded); ... }

我不知道哪个属性设置了检查单选按钮。 保持广播btn是否选中时,模型中必须具有相同的属性。 或者在展开时设置单选btn检查。

最后我解决了这个问题。 首先将此变量添加到适配器。

private int selectedPosition = -1;

然后,我修改了getGroupView。

@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
    String groupTitle = context.getString(R.string.actionPlanGroupHeader) + (groupPosition+1);
    if (convertView == null) {
        convertView = LayoutInflater.from(context).inflate(R.layout.action_plan_alarm_expandable_group, null);
    }
    TextView tvGroup = (TextView) convertView.findViewById(R.id.tvAlertName);
    tvGroup.setText(groupTitle);

    RadioButton selectGroup = (RadioButton)convertView.findViewById(R.id.rbSelectActionPlan);
    selectGroup.setChecked(groupPosition == selectedPosition);
    selectGroup.setTag(groupPosition);
    selectGroup.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            buttonCheckChanged(view);
        }
    });

    return convertView;
}

private void buttonCheckChanged(View view) {
    selectedPosition = (Integer) view.getTag();
    notifyDataSetChanged();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM