2015-02-18 45 views
1

我有BaseExpandableListAdapter与ExpandableListView但我有麻烦让我的孩子ViewHolder初始化到正确的看法。我把一个破发点中getChildView并在第一时间它被称为一切都好BaseExpandableListAdapter与ExpandableListView返回错误的子视图

groupPosition:0,childPosition:0,convertView:空

的ViewHolder获取设置和我们是很好的第一行(0 )。下一次它被称为我得到:

groupPosition:0,childPosition:1,convertView:从排ViewHolder对象(0)

为什么返回从第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; 
} 
+0

删除您的if和else,并把这个..如果(convertView == NULL){ \t LayoutInflater infalInflater =(LayoutInflater)this._context \t .getSystemService(Context.LAYOUT_INFLATER_SERVICE); \t convertView = infalInflater.inflate(R.layout.child_layout,null); \t} – Pavya 2015-02-18 06:12:51

+0

没有运气,相同的问题 – bmurmistro 2015-02-18 13:34:57

回答

1

我的页面布局包含一个垂直的LinearLayout,它包裹了一切。我有layout_height =“wrap_content”。将其更改为match_parent可解决问题。希望这可以帮助某人。

+0

嘿,你真棒。在Android中这太愚蠢了,如果你的可扩展列表视图是包装内容,那么这个孩子的位置有多么不一致......这真的是抛弃了我的数据/视图。我几乎只是使用小组的位置,并拉出所有的孩子,并为每一个都创建了布局(儿童数只设置为1)。谢谢你,先生! – 2016-08-17 14:20:51

+0

很高兴能帮到你! – bmurmistro 2016-08-18 03:46:31

相关问题