3

子チェック ボックスを含む展開可能なリスト ビューがあります。チェック ボックスは、ID「check1」で child_helper xml に定義されています。何らかの理由で、複数のチェック ボックスがそれぞれ独立しているのではなく、リンクしているように見えます。たとえば、最初のグループの下で最初の項目を選択すると、そのグループの 3 番目ごとの項目が選択され、残りのすべてのグループでは 2 番目の項目が選択され、2 つスキップして次の項目が選択されます。

グループ 1 の最初の 3 つのアイテムを選択すると、すべてのグループのすべてのアイテムが選択されます。どういうわけか、各子の個別のチェック ボックスではなく、チェック ボックスの 3 つのグループを作成しました。カスタムアダプターで問題が修正されることを示唆する多くのチュートリアルを見てきました。カスタム アダプターを使用していますが、そのすべての機能を使用する方法がわかりません。

おそらく、それぞれの子のチェック ボックスをどのように区別すればよいのでしょうか。

ありがとう

これは私のリスナーのコードです:

expListView.setOnChildClickListener(new OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v,
    int groupPosition, int childPosition, long id) {
    Log.d( "Enter_Foods", "onChildClick: "+childPosition );
    CheckBox cb = (CheckBox)v.findViewById( R.id.check1 );
    if( cb != null )
        cb.toggle();
                return false;

            }
        });

    }

問題は、アダプターのオーバーライドされたメソッドの 1 つにあると思います。

ExpandableListAdapter foodCategoryExpand = new ExpandableListAdapter() {

@Override
Allitemsenabled()

other override methods...


public Object getChild(int groupPosition, int childPosition) {
    switch (groupPosition) {
    case 0:
    return group1.get(childPosition);
    case 1:
    return group2.get(childPosition);
    case 2:
    return group3.get(childPosition);
    default:
    return null;
    }
}

public View getChildView(int groupPosition, int childPosition, boolean isLastChild,         View convertView, ViewGroup parent) {
        ChildHolder holder;
        if (convertView == null) {
        holder = new ChildHolder();
        LayoutInflater inflator = LayoutInflater.from(Enter_Foods.this);
        convertView = inflator.inflate(R.layout.enter_foods_child_helper,null);
        holder.tvChild = (TextView) convertView.findViewById(R.id.enter_foods_exp_lay_child);
        convertView.setTag(holder);
        } else {
        holder = (ChildHolder) convertView.getTag();
        }

        //switch based on which group (main heading) child is in
        switch (groupPosition) {
        case 0:
        holder.tvChild.setText(group1.get(childPosition));
        break;
        case 1:
        holder.tvChild.setText(group2.get(childPosition));
        break;
        case 2:
        holder.tvChild.setText(group3.get(childPosition));
        break;
        }
        return convertView;
}

//create Group (main heading) view
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        GroupHolder holder;

        if (convertView == null) {
        holder = new GroupHolder();
        LayoutInflater inflator = LayoutInflater.from(Enter_Foods.this);
        //inflate xml file and then get view from that file
        convertView = inflator.inflate(R.layout.enter_foods_group_helper,null);
        holder.tvGroup = (TextView) convertView.findViewById(R.id.enter_foods_exp_lay_group);
        convertView.setTag(holder);

        } else {
        holder = (GroupHolder) convertView.getTag();
        }
        //this actually gets the text we set in onCreate and sets it to the textView (holder)
        holder.tvGroup.setText(groupTitle.get(groupPosition));
        return convertView; 

}

other override methods
4

1 に答える 1

0

このチェックボックスの問題を解決するには。

まずは1つ作成

ArrayList<String> isCheckedStatus = new ArrayList<String>();
CheckBox check_document;

リスト ビューの作成時に、この arraylist にデフォルトの「false」を入力します。

for (int i = 0; i < YOUR LIST ITEM ARRAY.size(); i++) {
                        isCheckedStatus.add("false");
                    }

チェックボックスの時点で、 getChildView メソッドでクリックします

@Override
    public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {if (isCheckedStatus.size() > 0) {
check_document = (CheckBox) convertView.findViewById(R.id.summary_chk);
                if (isCheckedStatus.get(childPosition).equalsIgnoreCase("false")) {
                    ((CheckBox) convertView.findViewById(R.id.summary_chk)).setChecked(false);
                } else if (isCheckedStatus.get(childPosition).equalsIgnoreCase("true")) {
                    ((CheckBox) convertView.findViewById(R.id.summary_chk)).setChecked(true);
                }

check_document.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {

                    System.out.println("AAAA  size" + isCheckedStatus.size());
                    if (((CheckBox) v).isChecked()) {
                        if (isCheckedStatus.size() > 0) {
                            isCheckedStatus.remove(childPosition);
                            isCheckedStatus.add(childPosition, "true");

                        }
                    } else {
                        if (isCheckedStatus.size() > 0) {
                            isCheckedStatus.remove(childPosition);
                            isCheckedStatus.add(childPosition, "false");
                        }

                    }
                }
            });
            }

これにより、getchildview メソッドが呼び出されるたびにチェックボックスのステータスが変更されます。また、複数のチェックボックスの選択の問題も解決します。

この仕事を願っています。それは私のために働いています...

于 2014-09-19T07:55:53.743 に答える