0

私のシナリオ:

ExpandablelistのgroupViewとchildViewにリストがあります。GroupViewとChildViewにはチェックボックスがあります。チェックボックスの設定に問題はありません。GroupViewのチェックボックスがオンになっているときに、ChilViewのすべてのチェックボックスをオンにしたい。

私はこれらの2つの解決策を経験しました:

AndroidExpandableListViewチェックボックスクリックされたチェックボックスのみを選択

ExpandableListView(Android)のすべてのチェックボックスをオンにします

groupPosition 2のチェックボックスをオンにすると、groupPosition5のチェックボックスが自動的にチェックされます。ここでも、groupPosition 1のチェックボックスをオンにすると、groupPosition6のチェックボックスが自動的にチェックされます。チェックボックスの状態をハッシュマップに保存しました。なぜこれが起こっているのか誰かが説明できますか?

childrenViewの私のコードは次のとおりです

public View getChildView(int groupPosition, int childPosition,
        boolean isLastChild, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub

    final ChildHolder holder;
    if (convertView == null) {
        convertView = layoutInflater.inflate(R.layout.group_item, null);
        holder = new ChildHolder();
        holder.cb = (CheckBox) convertView.findViewById(R.id.cb);
        holder.title = (TextView) convertView.findViewById(R.id.title);
        convertView.setTag(holder);
    } else {
        holder = (ChildHolder) convertView.getTag();
    }

    Item item = getChild(groupPosition, childPosition);
    holder.title.setText(item.name);
    if (DataHolder.selectedGroupMembers.containsKey(groupPosition) == true)
        holder.cb.setChecked(true);
    else {
        holder.cb.setChecked(false);
    }
    return convertView;
}

groupViewの私のコードは次のとおりです

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

    final GroupHolder holder;

    if (convertView == null) {
        convertView = layoutInflater.inflate(R.layout.group_list, null);
        holder = new GroupHolder();
        holder.cb = (CheckBox) convertView.findViewById(R.id.cb);
        holder.imageView = (ImageView) convertView
                .findViewById(R.id.label_indicator);
        holder.title = (TextView) convertView.findViewById(R.id.title);
        convertView.setTag(holder);
    } else {
        holder = (GroupHolder) convertView.getTag();
    }

    holder.imageView
            .setImageResource(groupStatus[groupPosition] == 0 ? R.drawable.group_down
                    : R.drawable.group_up);
    Item groupItem = getGroup(groupPosition);

    holder.title.setText(groupItem.name);

    if (DataHolder.selectedGroupMembers.containsKey(groupPosition) == true) {
        holder.cb.setChecked(true);

    } else {
        holder.cb.setChecked(false);

    }


    holder.cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {


        public void onCheckedChanged(CompoundButton buttonView,
                boolean isChecked) {
            if (isChecked == true) {
                DataHolder.selectedGroupMembers.put(groupPosition,
                        new Boolean(true));
                Log.i("Prativa Clicked", "group" + groupPosition);
                notifyDataSetChanged();

            } else if (DataHolder.selectedGroupMembers
                    .containsKey(groupPosition)) {
                DataHolder.selectedGroupMembers.remove(groupPosition);
                Log.i("Prativa Removed ", "group" + groupPosition);
                notifyDataSetChanged();
            }
        }

    });

    return convertView;
}

ハッシュマップの状態を次のように保存しました

    public static HashMap<Integer,Boolean> selectedGroupMembers =     new HashMap<Integer, Boolean>();
4

1 に答える 1

1

したがって、私は解決策を見つけました。完全なソリューションは、最終的な編集として質問自体に統合されます

于 2012-06-22T06:05:04.950 に答える