如何使可扩展列表视图中的每个组都可单一选择?

时间:2017-08-31 07:06:15

标签: android layout

您有可扩展列表视图的活动。在那里我必须从每个组中选择单个孩子。所以我用single_selection list_item.xml文件创建了一个子文件,在运行时我将single selection属性设置为true。

这是我的输出。

enter image description here

第一项的选择正常,直到我选择第二项。当我从第2组中选择一个项目时,第1组中的所选项目将被取消选中。给我任何想法。

单选

  xp_list.setChoiceMode(AbsListView.CHOICE_MODE_SINGLE);

适配器类     public class DegreeAdapter扩展了BaseExpandableListAdapter {

    private List<String> group;
    private Map<String, List<String>> array = new HashMap<>();

    DegreeAdapter(List<String> group, Map<String, List<String>> array) {
        this.group = group;
        this.array = array;
        //Logger.Log(TAG, "CONS===>" + array.toString());
    }

    @Override
    public int getGroupCount() {
        //Logger.Log(TAG, "CONS===>" + array);
        return group.size();
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        return array.get(getGroup(groupPosition)).size();
    }

    @Override
    public String getGroup(int groupPosition) {
        return group.get(groupPosition);
    }

    @Override
    public String getChild(int groupPosition, int childPosition) {
        return array.get(getGroup(groupPosition)).get(childPosition);
    }

    @Override
    public long getGroupId(int groupPosition) {
        return 0;
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return 0;
    }

    @Override
    public boolean hasStableIds() {
        return false;
    }

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.preference_header, parent, false);
        }
        String title = getGroup(groupPosition);
        ((TextView) convertView).setText(title);
        xp_list.expandGroup(groupPosition);
        return convertView;
    }

    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        if (convertView == null) {
            //Logger.Log("inside contain", "inside view null=");
            convertView = LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_multiple_choice, parent,
                    false);
        }

        String singleObj = getChild(groupPosition, childPosition);

        if (selectedIdList.contains(singleObj)) {
            Log.i("inside contain", "id=" + singleObj);
            ((CheckedTextView) convertView).setChecked(true);
        } else {
            ((CheckedTextView) convertView).setChecked(false);
        }

        TextView titleView = (TextView) convertView;
        titleView.setText(singleObj);
        titleView.setTextColor(Color.GRAY);

        convertView.setTag(singleObj);

        return convertView;
    }

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

}

1 个答案:

答案 0 :(得分:0)

/**Try to Use Below code Snipet**/ 

implements ExpandableListView.OnChildClickListener
in your activity class

your_expListView.setOnChildClickListener(this);

Then override the onchildCount method of Expandable Listview Method

@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id)
{
    /**Do you Selectable code over here**/
    return false;
}
相关问题