2

私の ExpandableListView では、すべてのグループの最初の子をグループ内の他の子とは異なる xml ビューにしたいと考えています。

私が達成したいのは次のようなものです:

ここに画像の説明を入力

私は次のコードでそれを行うことができます:

public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View newView, ViewGroup parent) {



    if (newView==null){

        // CHILD HEADER
        if (childPosition == 0){
            LayoutInflater infalInflater = (LayoutInflater) this.context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            newView = infalInflater.inflate(R.layout.super_trener_cell_child_header, null);


        // CHILD CELL
        else{
            LayoutInflater infalInflater = (LayoutInflater) this.context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            newView = infalInflater.inflate(R.layout.super_trener_cell_child, null);
            }
    }

    return newView;
}

そして、それはうまく機能します。ただし、1 つ問題があります。セルを拡大および縮小するたびに、子セルの出現順序が変わります。

何が起こっているかを示すいくつかのスクリーンショットを次に示します (数字は表示される順序を表しています)。

ここに画像の説明を入力 ここに画像の説明を入力

グループヘッダーをクリックするたびに、このセル反転の原因は何ですか?

編集:アダプタコード全体:

public class SuperTrenerCellAdapter extends BaseExpandableListAdapter {

Context context;
List<SuperTrenerTopic> topics = new LinkedList<SuperTrenerTopic>();
private static LayoutInflater inflater = null;

public SuperTrenerCellAdapter(List<SuperTrenerTopic> topics, Context context) {
    this.topics = topics;
    this.context = context;
}

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

@Override
public int getChildrenCount(int groupPosition) {
    SuperTrenerTopic topic = topics.get(groupPosition);
    return topic.getLessonList().size()+1;
}

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

@Override
public Object getChild(int groupPosition, int childPosition) {
    return childPosition;
}

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

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

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

@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
    if (convertView == null) {
        LayoutInflater infalInflater = (LayoutInflater) this.context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.super_trener_cell_header, null);
    }
    SuperTrenerTopic topic = topics.get(groupPosition);
    TextView topicTitle = (TextView)convertView.findViewById(R.id.stc_topicName);
    topicTitle.setText(topic.getName());

    return convertView;
}

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

    SuperTrenerTopic topic = topics.get(groupPosition);
    if (convertView==null){

        // CHILD HEADER
        if (childPosition == 0){
            LayoutInflater infalInflater = (LayoutInflater) this.context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(R.layout.super_trener_cell_child_header, null);


        }

        // LESSON CELL
        else{
            LayoutInflater infalInflater = (LayoutInflater) this.context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(R.layout.super_trener_cell_child, null);
            SuperTrenerLesson stl = topic.getLessonList().get(childPosition-1);
            TextView title = (TextView)convertView.findViewById(R.id.st_cell_child_title);

            title.setText(""+stl.getTitle());

        }
    }

    return convertView;
}

@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
    if (childPosition == 0){
        return false;
    }
    else{
        return true;
    }
}

}

4

1 に答える 1