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>
答案 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。