ExpandableListView不显示子视图

时间:2014-04-19 06:38:44

标签: android android-listview expandablelistview radio-group expandablelistadapter

public class ItemOptionsListAdapter extends BaseExpandableListAdapter {

private Context context;
private LayoutInflater inflater;
private List<String> categoryList;

public ItemOptionsListAdapter(Context context, List<String> categoryList) {
    this.context = context;
    this.categoryList = categoryList;
    this.inflater = LayoutInflater.from(this.context);
}

private TextView title(View v, int resId, String text){
    TextView tv = (TextView) v.findViewById(resId);
    tv.setText(text);
    return tv;
}

private ImageView image(View v, int resId, int icon){
    ImageView iv = (ImageView) v.findViewById(resId);
    return iv;
}

class ItemListViewHolder{
    TextView title;
    ImageView dropdownArrowImage;
}

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

@Override
public int getChildrenCount(int groupPosition) {
    return 1;
}

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

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

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

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

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

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

    ItemListViewHolder categoryItemViewHolder;
    if(convertView == null) { 
        convertView = inflater.inflate(R.layout.category_list_row_layout, null); 
        categoryItemViewHolder = new ItemListViewHolder(); 
        convertView.setTag(categoryItemViewHolder); 
    } 
    else { 
        categoryItemViewHolder = (ItemListViewHolder) convertView.getTag(); 
    }
    categoryItemViewHolder.title = title(convertView, R.id.category_name_text, categoryList.get(groupPosition));
    categoryItemViewHolder.dropdownArrowImage = image(convertView, R.id.dropdown_arrow_image, 0);
    return convertView;
}

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

    if(convertView == null) { 
        convertView = inflater.inflate(R.layout.item_option_list_layout, null);
    } 
    Log.d("child", " in getChildView()");
    TextView itemPropertyTextView = (TextView)convertView.findViewById(R.id.item_option_property);
    itemPropertyTextView.setText((String)"Size");
    return convertView;

}

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

我的孩子视图将是静态的,每个组都包含一个孩子 childlayout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <TextView android:id="@+id/item_option_property"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Size" />

    <RadioGroup android:id="@+id/item_option_radio_group"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

       <RadioButton android:text="Small"/>
       <RadioButton android:text="Medium"/>
       <RadioButton android:text="Large"/>

   </RadioGroup> 

</LinearLayout>

组视图布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:background="#50ffffff" >

<TextView android:id="@+id/category_name_text"
    android:layout_width="0dp"
    android:layout_height="wrap_content" 
    android:layout_gravity="center_vertical"
    android:textSize="16sp" 
    android:layout_weight="1"
    android:layout_margin="15dp"
    android:textColor="#ffffff" />

<ImageView android:id="@+id/dropdown_arrow_image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"
    android:src="@drawable/ic_arrow_down"
    android:layout_margin="15dp"
    android:rotation="270" />

</LinearLayout>

同样来自日志,我知道getChildView永远不会被称为

提前致谢

编辑:我刚注意到一件事,一旦groupView出现,右边的一个小滚动闪烁,这表示一切正常,但视图本身并不完全可见。但似乎还没有解决它。

我的可展开列表xml:

<ExpandableListView 
   android:id="@+id/item_option_list"
   android:layout_width="match_parent"
   android:layout_height="wrap_content" 
   android:groupIndicator="@null" >
</ExpandableListView>

7 个答案:

答案 0 :(得分:4)

确保您已点击群组标题,因为默认情况下会折叠孩子。

答案 1 :(得分:1)

在查看已发布的代码时,一切似乎都正确。我建议尝试以下方法来找出问题, 1)在布局膨胀部分添加以下内容, 在getGroupView中 convertView = inflater.inflate(R.layout.category_list_row_layout,parent,false);

在getChildView中 convertView = inflater.inflate(R.layout.item_option_list_layout,parent,false);

上面的代码行将确保它从其父ViewGroup中获取正确的布局属性。

2)添加日志消息Log.d(“child”,“in getChildView()”);在函数的开头,它将告诉我们函数是否未被调用,或者在给定布局中呈现视图时是否有任何异常。

3)尝试从getChildView()构造并返回一个简单的TextView,然后以增量方式添加复杂视图。

答案 2 :(得分:1)

在群组的顶部布局中使用此代码:

android:descendantFocusability="blocksDescendants"

答案 3 :(得分:1)

我遇到了同样的问题,我发现了自己的问题。 ExpandableListView的layout_height属性为wrap_content,默认为标题。所以你有2个选项来解决这个问题。

选项1:将layout_height修复为某个值。

android:layout_height="100dp"

选项2:以编程方式在onCreateView中以适当的方式更改列表视图的高度。

ViewGroup.LayoutParams params = expandableListView.getLayoutParams();
params.height = array_list.size() * 20;
expandableListView.setLayoutParams(params);
expandableListView.requestLayout();

答案 4 :(得分:0)

尝试使用其他组视图布局。我也遇到了这个问题,我在最高的LinearLayout中删除了一些(我认为不需要)android:并且它有效。希望这有帮助!

答案 5 :(得分:0)

对于其他读者而言,这已经相当晚了......

问题是由您的

引起的

groupview linearlayout 水平方向。

android:orientation="horizontal" - &gt;将其设置为vertical而不是。

答案 6 :(得分:0)

如果您使用任何Button或ImageButton默认属性将无法正常工作。有关详细信息,请参阅this