1

N レベルの ExpandableListView を実装しようとしています。これらのコードをgetChildViewおよびに使用していgetGroupViewます。

    @Override
public View getChildView(int groupPosition, int childPosition,
        boolean isLastChild, View view, ViewGroup parent) {

    ExpandNode child = (ExpandNode) getChild(groupPosition, childPosition);
    ExpandNode group = (ExpandNode) getGroup(groupPosition);

    if (group.hasChild()) {
        if (view == null) {
            view = LayoutInflater.from(context).inflate(R.layout.index_expandable_list, null);
        }
        ExpandableListView expandableListView = (ExpandableListView) view.findViewById(R.id.myExpandableListView);
        ExpandAdapter adapter = new ExpandAdapter(context, group.getChilds());
        expandableListView.setAdapter(adapter);
    } else {
        if (view == null) {
            view = LayoutInflater.from(context).inflate(R.layout.index_child_row, null);
        }
        TextView childTextView = (TextView) view.findViewById(R.id.childTextView);
        childTextView.setText(child.getTitle().toString());
    }
    return view;
}

と :

@Override
public View getGroupView(int groupPosition, boolean isLastChild, View view,ViewGroup parent) {
    ExpandNode group = (ExpandNode) getGroup(groupPosition);
    if (view == null) {
        view = LayoutInflater.from(context).inflate(R.layout.index_parent_row, null);
    }
    TextView childTextView = (TextView) view.findViewById(R.id.parentTextView);
    childTextView.setText(group.getTitle().toString());
    return view;
}

問題は、図のようにネストされたアダプターを使用しているときです。内部アダプターgetChildViewgroupPosition値は常に 0 でgetGroupViewあり、常に arrayList の最初の値を参照しています。例: arrayList の値は次のとおりです。

Level1
    level1_1
    level1_2
    level1_3
level2

しかし、それは示しています:

Level1
    level1_1
    level1_1
    level1_1
level2

ネストされたアダプターを使用している場合にのみ発生し、getChildView次のように使用すると機能します。

    @Override
public View getChildView(int groupPosition, int childPosition,boolean isLastChild, View view, ViewGroup parent) {

    ExpandNode child = (ExpandNode) getChild(groupPosition, childPosition);
    if (view == null) {
        view = LayoutInflater.from(context).inflate(R.layout.index_child_row, null);
    }
    TextView childTextView = (TextView) view.findViewById(R.id.childTextView);
    childTextView.setText(child.getTitle().toString());
    return view;
}

しかし、それはもはや N レベルのリストではありません...これを修正する方法はありますか?

以下に記載されているアダプターに実装されているその他のメソッド:

    @Override
public Object getChild(int groupPosition, int childPosition) {
    return groups.get(groupPosition).getChilds().get(childPosition);
}

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

@Override
public int getChildrenCount(int groupPosition) {
    return groups.get(groupPosition).getChilds().size();
}

@Override
public Object getGroup(int groupPosition) {
    return groups.get(groupPosition);
}

@Override
public int getGroupCount() {
    return groups.size();
}

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

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

@Override
public boolean isChildSelectable(int arg0, int arg1) {
    return true;
}
4

1 に答える 1

0

問題に直面したとき。それには、getChildCount(int)別のすべての子のカウントが含まれていExpandableListViewます。私はまだそれに取り組んでいます。すぐに回答を投稿します。この質問に星を付けるので、忘れずに答えてください

于 2016-07-16T12:39:52.940 に答える