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:可能只有我会遇到这种错吧! 希望对大家有帮助~~