在fragment中用频道管理遇到的问题(解决)

ps:和在Activity中做大体是一样的,如果想了解具体内容,请观看上一篇文章:https://blog.csdn.net/weixin_43807869/article/details/85062439

在fragment做频道管理遇到的问题:
在这里插入图片描述
大家仔细观察就可以发现,不论怎么去掉频道,返回后频道还在

可以判断是onActivityResult方法没有接收到回传值

对比一下,Activity做法与Fragment做法不同之处

Fragment:

//进入频道管理
 ChannelActivity.startChannelActivity((AppCompatActivity) getActivity(),tele_list);

Activity:

//启动管理,跳转(进入频道管理),将频道集合传过去
  ChannelActivity.startChannelActivity(MainActivity.this,titlelist);

参数一个是getActivity(),一个是MainActivity.this
getActivity():fragment没有上下文,它只能求助于它绑定的Activity
所以说修改频道后返回,值没有回传到Fragment中的onActivityResult而是回传到了它绑定的activity中

解决办法:
在fragment绑定的Activity中,重写onActivityResult方法,将data传递给fragment中的onActivityResult方法:

//接受到新频道的值
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
         //根据tag找到fragment
        Fragment ff = getSupportFragmentManager().findFragmentByTag("ff");
        //将得到的新频道传递给fragment01的onActivityResult
        ff.onActivityResult(requestCode, resultCode, data);

    }

结果图:
在这里插入图片描述

最后:我还遇见一种错误,操作频道后,切换下方的fragment(点击消息2/3),再次返回消息1发现又回到最初的频道:

原因是:切换fragment,我用的替换事务的方法,每次切换都会new新的fragment**

**这样:**

 //获取事务管理
        manager = getSupportFragmentManager();
        //开启事务
        FragmentTransaction fragmentTransaction = manager.beginTransaction();
        //添加事务
        fragmentTransaction.add(R.id.frameLt,new Fragment01());
        //提交事务
        fragmentTransaction.commit();

        //第一个Radiobutton默认选中
        radioGroup.check(radioGroup.getChildAt(0).getId());

        //radioGroup的监听
        radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int i) {
                //开启新事务,上一个已经提交
                FragmentTransaction fragmentTransaction2 = manager.beginTransaction();

                switch (i){
                    case R.id.btn01:
                        //替换fragment
                        fragmentTransaction2.replace(R.id.frameLt,new Fragment01());
                        break;
                    case R.id.btn02:
                        fragmentTransaction2.replace(R.id.frameLt,new Fragment02());
                        break;
                    case R.id.btn03:
                        fragmentTransaction2.replace(R.id.frameLt,new Fragment03());
                        break;

                }
                fragmentTransaction2.commit();
            }
        });

ps:可能只有我会遇到这种错吧! 希望对大家有帮助~~

猜你喜欢

转载自blog.csdn.net/weixin_43807869/article/details/85126229