Android 带有ExpandableListView的BaseExpandableListAdapter返回错误的子视图

Android 带有ExpandableListView的BaseExpandableListAdapter返回错误的子视图,android,expandablelistview,expandablelistadapter,Android,Expandablelistview,Expandablelistadapter,我有带ExpandableListView的BaseExpandableListAdapter,但我无法将我的子ViewHolder初始化为正确的视图。我在getChildView中设置了一个断点,第一次称为“一切都很好” groupPosition:0,childPosition:0,convertView:null 设置了ViewHolder,我们可以处理第一行(0)。下次打电话时,我会: groupPosition:0,childPosition:1,convertView:第(0)行中的

我有带ExpandableListView的BaseExpandableListAdapter,但我无法将我的子ViewHolder初始化为正确的视图。我在getChildView中设置了一个断点,第一次称为“一切都很好”

groupPosition:0,childPosition:0,convertView:null

设置了ViewHolder,我们可以处理第一行(0)。下次打电话时,我会:

groupPosition:0,childPosition:1,convertView:第(0)行中的ViewHolder对象

为什么它从第0行返回视图?我已经包括了从BaseExpandableListAdapter重写的方法。为了获得正确的视图,是否需要覆盖其他方法

child_layout.xml
<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:weightSum="9">
    <LinearLayout android:layout_width="0dp"
                  android:layout_height="wrap_content"
                  android:orientation="horizontal"
                  android:layout_weight="1">
        <EditText.../>
    </LinearLayout>
    ...
</LinearLayout>




// Group and children are both collections
@Override
public int getGroupCount() {
    return group.size();
}

@Override
public int getChildrenCount(int groupPosition) {
    return group.get(groupPosition).getChildren().size();
}

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

@Override
public Object getChild(int groupPosition, int childPosition) {
    return group.get(groupPosition).getChildren().toArray()[childPosition];
}

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

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

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

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

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

    final GroupViewHolder groupViewHolder;
    if( null == convertView ) {
        convertView = LayoutInflater.from( context ).inflate(R.layout.group_layout, parent, false);
        groupViewHolder = new GroupViewHolder();
        // add delete group button
    } else {
        groupViewHolder = (GroupViewHolder) convertView.getTag();
    }
    return convertView;
}

@Override
public View getChildView(final int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
    View v = convertView;
    final ViewHolder viewHolder;
    if (null == v){
        v = LayoutInflater.from( context ).inflate(child_layout, parent, false);
        viewHolder = new ViewHolder();
        // bind edittext fields
        v.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) v.getTag();
    }
    return v;
}
child_layout.xml
...
//组和子对象都是集合
@凌驾
public int getGroupCount(){
返回组.size();
}
@凌驾
公共整数getChildrenCount(整数组位置){
返回group.get(groupPosition.getChildren().size();
}
@凌驾
公共对象getGroup(int-groupPosition){
返回组.get(groupPosition);
}
@凌驾
公共对象getChild(int-groupPosition,int-childPosition){
返回group.get(groupPosition.getChildren().toArray()[childPosition];
}
@凌驾
公共长getGroupId(int-groupPosition){
返回getGroup(groupPosition).hashCode();
}
@凌驾
公共长getChildId(int-groupPosition,int-childPosition){
返回getChild(groupPosition,childPosition).hashCode();
}
@凌驾
公共布尔表ID(){
返回true;
}
@凌驾
公共布尔值isChildSelectable(int-groupPosition,int-childPosition){
返回true;
}
@凌驾
公共视图getGroupView(int groupPosition、布尔isExpanded、视图convertView、视图组父级){
最终组视图持有者组视图持有者;
if(null==convertView){
convertView=LayoutFlater.from(上下文)。充气(R.layout.group_布局,父级,false);
groupViewHolder=新的groupViewHolder();
//添加删除组按钮
}否则{
groupViewHolder=(groupViewHolder)convertView.getTag();
}
返回视图;
}
@凌驾
公共视图getChildView(最终int-groupPosition、int-childPosition、布尔isLastChild、视图convertView、视图组父级){
视图v=转换视图;
最终持票人;
如果(null==v){
v=布局更平坦。从(上下文)。充气(子布局,父布局,假);
viewHolder=新的viewHolder();
//绑定编辑文本字段
v、 setTag(视图持有者);
}否则{
viewHolder=(viewHolder)v.getTag();
}
返回v;
}

我的页面布局包含一个垂直的线性布局,它包裹了所有内容。我有layout\u height=“wrap\u content”。将此更改为匹配父项修复了此问题。希望这对某人有所帮助。

删除你的if和else并放置此..if(convertView==null){LayoutInflater infalInflater=(LayoutInflater)this.\u context.getSystemService(context.LAYOUT\u INFLATER\u SERVICE);convertView=infalInflater.inflate(R.LAYOUT.child\u LAYOUT,null);}嘿,你太棒了。在Android中,如果您的可扩展列表视图是包装内容,那么子位置是多么不一致,这太愚蠢了。。。这真的是在浪费我的数据/视图。我几乎只使用了组位置,拉取所有子对象,并在一次拍摄中为每个子对象创建布局(子对象计数仅设置为1)。谢谢你,先生!很高兴我能帮忙!