2 qq 36565195 qq_36565195 于 2017.01.12 10:03 提问

关于expandablelistview子项布局复用调用了父项复用的问题

我在getgroupview里面设置的是复用,子项也是需要复用的,但是子项的复用一直会调
用父项里面的,但是我tag设置的明明就是子项的holder,以下是代码,希望大神帮忙一下,急
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {

    int Type = getGroupType(groupPosition);
    switch (Type){
        case GROUP_TYPE_ONE:
            if (convertView == null){
                convertView = LayoutInflater.from(mContext).inflate(R.layout.list_category_item,null);
            }
            TextView textView = (TextView) convertView.findViewById(R.id.list_category_name);
            textView.setText((Integer) getGroup(groupPosition));
            textView.setTextSize(20);
            break;
        case GROUP_TYPE_TWO:
            GroupHolder groupHolder;
            if (convertView == null){
                groupHolder = new GroupHolder();
                convertView = LayoutInflater.from(mContext).inflate(R.layout.expand_group_layout,null);
                groupHolder.mGroupImg = (ImageView) convertView.findViewById(R.id.FAQ_list_item_image);
                groupHolder.mGroupNomalImg = (ImageView) convertView.findViewById(R.id.FAQ_list_cancle_image);
                groupHolder.mGroupText = (TextView) convertView.findViewById(R.id.FAQ_list_item_text);
                groupHolder.mGroupRela = (RelativeLayout) convertView.findViewById(R.id.FAQ_list_item_image_main);
                convertView.setTag(groupHolder);
            }else{
                groupHolder = (GroupHolder) convertView.getTag();
                Log.e(TAG,convertView.getTag().toString()+"groupview");
            }

                ItemValue itemValue = (ItemValue) getGroup(groupPosition);
                groupHolder.mGroupText.setText(itemValue.getmMainContent());
                groupHolder.mGroupImg.setImageResource(R.mipmap.faq_icon);
                if (isExpanded){
                    groupHolder.mGroupNomalImg.setImageResource(R.mipmap.status_enter_p);
                }else {
                    groupHolder.mGroupNomalImg.setImageResource(R.mipmap.status_enter);
                }
                LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(CCIApplication.getScreenHeight(20),CCIApplication.getScreenHeight(20));
                groupHolder.mGroupRela.setLayoutParams(params);
                groupHolder.mGroupNomalImg.setLayoutParams(params);


            break;
    }


    return convertView;
}


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

    //View view = convertView;
    ChildHolder childHolder ;
    if (convertView == null){
                childHolder = new ChildHolder();
        convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.child_text_layout,null);
        childHolder.mChildText = (TextView) convertView.findViewById(R.id.child_text);
        convertView.setTag(childHolder);
    }else{
        Log.e(TAG,convertView.getTag()+"childview");
        childHolder = (ChildHolder) convertView.getTag();
    }

    ItemValue itemValue = (ItemValue) getChild(groupPosition,childPosition);
    childHolder.mChildText.setText(itemValue.getmMainContent());
    return convertView;
}
    当执行childHolder = (ChildHolder) convertView.getTag();这一句时,返回的是grouphlder
    报错log如下:
    01-12 10:14:10.025 31271-31271/cci.com.soundmax.hk E/Expandable: cci.com.soundmax.hk.setting.adapter.MyExpandableAdapter$GroupHolder@b797a7egroupview

01-12 10:14:10.035 31271-31271/cci.com.soundmax.hk E/Expandable: cci.com.soundmax.hk.setting.adapter.MyExpandableAdapter$GroupHolder@9624af5childview
01-12 10:14:10.045 31271-31271/cci.com.soundmax.hk E/AndroidRuntime: FATAL EXCEPTION: main
Process: cci.com.soundmax.hk, PID: 31271
java.lang.ClassCastException: cci.com.soundmax.hk.setting.adapter.MyExpandableAdapter$GroupHolder cannot be cast to cci.com.soundmax.hk.setting.adapter.MyExpandableAdapter$ChildHolder
at cci.com.soundmax.hk.setting.adapter.MyExpandableAdapter.getChildView(MyExpandableAdapter.java:244)

1个回答

qq_36565195
qq_36565195   2017.01.12 11:02

大神快来,求教啊!!!!!!

lxdSuper
lxdSuper 我也遇到了这个问题,楼主解决了吗
5 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
ExpandableListView长按确定父项与子项
在使用ExpandableListView时有时需要对父项设置长按监听,但自带的setOnItemLongClickListener中的flatPos位置是所有展开项,包括父项和子项在内的位置,而大多情况下需要得到父项再父项列表中的位置以及子项在子项列表中的位置。下面是解决方法://长按监听 expandableListView.setOnItemLongClickListener(new Adap
ExpandableListView动态编辑 item出现convertView 复用错乱问题
Activity 页面 private int[][] tags = null; private int a; private int b; protected void init() { setContentView(R.layout.activity_tank_list_editor); Intent intent = getIntent();
ExpandableListView 展开childView后,childView及GroupView布局错乱的问题
算是踩过的一个坑吧。期望实现的效果是这样的: 实际的效果确实这样的: 可以看到,上图中标红的部分有明显的空白。因为ExpandableListView每个item有间隔,所以设置“android:dividerHeight”属性。<ExpandableListView android:layout_marginTop="15dp" android:layout
ExpandableListView 和CheckBox结合使用
先说说需求,这样便于理解代码:(以图来讲解说明) 这是A页面:可以看到一个医疗组:组名是从B 页面拿到的。想要更换组名,点击这个组,就跳转到B页面。 2.这是B页面:页面是分组选项,其中:A页面上次选的组名要在B页面展示出来,同时,用户也可以重新选择组名,再传递给A.3.做的过程中碰到的难点就是:A页面选择的组名怎么在B页面中展示。(1) 我刚开始的思路是:把A页面选择的组名的ID保留传递给B,然后
ExpandableListView加EditText及ListView加EditText item复用解决数据错乱问题
解决item 复用引起的数据错乱问题; 1,当item 中含有EditeText 的时候,进行编辑保存。 2,当需要item 中的文字输入限定金额等,教研的时候出现的addTextChangedListener多次执行
解决ListView滚动复用convertview和ViewHolder数据填充错乱
我说下我的理解,最可能出现重复的情况就是getView(int position, View convertView, ViewGroup parent)中的convertview利用的情况,由于getview的时候,listview自身会复用已存在的item,即重用最先新建的那几个item,还有就是注意tag的使用,convertView.getTag()返回的也是重用的view,其状态是和被重
Expandablelistview的数据重复问题
解决ExpandableListView数据重复问题
ExpandableListView的自定义布局以及注意事项
android开发中常常需要使用到ExpandableListView来对一组数据进行分组, 使用ExpandableListView能够达到类似QQ分组的效果,类似于下面两张效果图: 要达到这种效果其实并不难,因为ExpandableListView跟ListView很相似,如果你对ListView很熟悉的话,很快就能掌握它,如果对ListView不熟悉的话,建议 先看看之前的博文 andr
ExpandableListView、ListView EditText 输入数据混乱的问题
如图所示,可以点加号减号修改数量,也可以直接点击进行输入 ExpandableListView、ListView EditText 输入数据混乱的问题,在ExpandableListView和ListView的Item中有EditText输入框的时候,在输入的时候,如果不做处理就会发生混乱,这个问题主要是由复用Item造成的,简单地解决方法就是不复用Item,但这样会带来性能问题,数据量大的时候就
ListView和ExpandableListView去除分隔线,ExpandableListView去除父布局的向下的图标和默认打开所有子布局,父布局没有点击事件
去除分隔线 android:divider="@null" android:dividerHeight = "0dp" 去除父节点图标// ExpandableListView的布局的id ExpandableListView.setGroupIndicator(null); ExpandableListView默认打开所有子布局//设置默认子布局全部打开 listview_lv是Expanda