ExpandableListView在onAvtivityResult方法里面展开group不成功

今天实现ExpandableListView展开和关闭group功能时,重写了onActivityResult方法和onResume方法。


首先要知道展开group的方法是:

exList.expandGroup(groupPosition);//groupPosition的值从0开始


闭合group的方法是:

exList.collapseGroup(groupPosition);//groupPosition的值从0开始


其中,exList是ExpandableListView的对象。


onActivityResult方法是用来处理从第二个activity里面传回来的数据;onResume方法在启动activity时候回被自动执行,在我的项目中是为了刷新ExpandableListView子列表里面的内容,使用重新获取子列表内容和重新设置adapter的方法刷新内容。重新设置adapter就会把所有group都设置为非展开状态。


我想要在第二个activity(项目中是RecordNewItemActivity)被finish掉的时候将修改的数据分类传回给第一个activity(项目中是GuideActivity),所以在GuideActivity里面使用

startActivityForResult(intent,0);//第二个参数可以是大于等于0的任意值


并且在RecordNewItemActivity里面用
setResult(RESULT_OK,intent);


将intent传回给GuideActivity
然后在onActivityResult方法里面处理返回来的数据。
如果直接在onActivityResult方法中设置group展开,代码如下:
@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        switch (resultCode){
            case RESULT_OK:

                Bundle bundle = data.getExtras();
                type_result = bundle.getString("type");
                for(int i = 0;i<type.length;i++){
                    if( type[i].equals(type_result)){
                        Toast.makeText(context,""+type[i].equals(type_result),Toast.LENGTH_SHORT).show();
                        exList.expandGroup(i);
                    }
                }
                break;
        }
    }

这样运行之后不能展开group,但是Toast确确实实已经被执行了!

下面是onResume方法的代码:

 /**
     *用于实现当从其他activity返回到该activity时,刷新该activity的列表内容
     */
    @Override
    protected void onResume() {
        super.onResume();
        refrash();
    }

refrash方法的代码如下:

/**
     * 刷新列表内容
     */
    public void refrash(){
        getChildsContent();
	// adapter.notifyDataSetChanged();
        setListData();
    }

getChildsContent方法用来从SQLite里面读取到每个分组的内容。
setListData方法用来为ExpandableListView的对象exList添加适配器。代码如下:

/**
     * 设置列表里面的内容
     */
    public void setListData() {
        adapter = new MyBaseExpandableListAdapter(context,groups,childs_name,childs_account);
        setListAdapter(adapter);

    }


通过测试发现onResume方法的执行是在onActivityResult方法之后。onActivityResult方法展开了group,但是在执行onResume方法后,因为重新设置了adapter,所以加载后的exList是所有group都闭合的,因此展开的group又被闭合了。这就是错误所在!


于是修改代码,让expandGroup方法在refrash方法里面执行,正确的代码是这样的:
@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        switch (resultCode){
            case RESULT_OK:

                Bundle bundle = data.getExtras();
                type_result = bundle.getString("type");
                break;
        }
    }

/**
     * 刷新列表内容
     */
    public void refrash(){
        getChildsContent();
	// adapter.notifyDataSetChanged();
        setListData();
        for(int i = 0;i<type.length;i++){
            if( type[i].equals(type_result)){
                Toast.makeText(context,""+type[i].equals(type_result),Toast.LENGTH_SHORT).show();
                exList.expandGroup(i);
            }
        }
    }

这样在finish掉RecordNewItemActivity之后,GuideActivity首先执行onActivityResult方法,获取到了从RecordNewItemActivity传回来的值,然后执行onResume方法。onResume方法首先重新添加适配器,这时的分组都是闭合着的,然后判断应该哪一组展开并设置展开,这样闭合的group就被展开了。任务完成。


总结一下:
1.展开group的方法是exList.expandGroup(groupPosition);
2.闭合group的方法是exList.collapseGroup(groupPosition);
3.当需要同时重写onResume方法和onActivityResult方法时,两个方法的执行顺序是:先执行onActivityResult方法,然后执行onResume方法,所有有些操作一定要想好应该怎么执行!


总算是解决了这个小问题,心里畅快多了!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值