Xigong93/ExpandableRecyclerView

为什么我想重写getGroupItemViewType方法却报错?

9292922 opened this issue · 2 comments

我想把索引为0的group区分开
@Override public int getGroupItemViewType(int groupPosition) { return (groupPosition==0)?0:1; }

最后却报错
java.lang.ClassCastException: com.magicalstory.cleaner.timer.main.list.adapter$ViewHolder_child cannot be cast to com.magicalstory.cleaner.timer.main.list.adapter$ViewHolder_group
at com.magicalstory.cleaner.timer.main.list.adapter.onBindGroupViewHolder(adapter.java:54)

即下面代码的类转换错误了,不知道为什么子项的viewholder为何出现在了group的事件中:
`
@OverRide
protected void onBindGroupViewHolder(ExpandableAdapter.ViewHolder viewHolder, int i, boolean b, List<?> list) {
functionsGroup functionsGroup = groupArrayList.get(i);
((ViewHolder_group) viewHolder).title.setText(functionsGroup.getTitle());
}

`

其他相关代码:
` @OverRide
public int getChildItemViewType(int groupPosition, int childPosition) {
return super.getChildItemViewType(groupPosition, childPosition);
}

@Override
public int getGroupItemViewType(int groupPosition) {
    return (groupPosition==0)?0:1;
}

@OverRide
protected ExpandableAdapter.ViewHolder onCreateChildViewHolder(ViewGroup viewGroup, int i) {
return new ViewHolder_child(LayoutInflater.from(context).inflate(R.layout.item_card_main_ver, viewGroup, false));
}

@Override
protected ExpandableAdapter.ViewHolder onCreateGroupViewHolder(ViewGroup viewGroup, int i) {
    Log.d("adapter", "i:" + i);
    return (i==0)?new ViewHolder_group(LayoutInflater.from(context).inflate(R.layout.item_group_main_no_title, viewGroup, false)):new ViewHolder_group(LayoutInflater.from(context).inflate(R.layout.item_group_main, viewGroup, false));
}`

百思不得其解,明明从来没有在onCreateGroupViewHolder方法返回ViewHolder_child啊,为什么在BindGroup会出现ViewHolder_child,而且我在没有重写获取group和child的viewtype方法前一切正常。

解决了,getGroupItemViewType不能返回0,换成其他数字就行了

image
是的,默认情况下,groupItemType 必须大于0,可以实现isGroup方法来修改这个特性