Fragment

作者: 灰色轨迹_e2d8 | 来源:发表于2019-04-11 23:56 被阅读0次

只用replace,fragment会被destroy
用repalce和addToBackStack,fragment会被destroyView

fragment写死再xml布局中,onCreateView会在activity的onCreate时执行,所以onCreateView中不能使用setContentView后面的数据。

需求:

Activity绑定一个rootFragment,可以被其他fragment覆盖,但是rootFragment不能被销毁。

解决:

activity onCreate时添加rootFragment,不要加入返回栈
跳转至其他fragment时使用add(用replace会令rootFragment被销毁)、show、hide,并加入返回栈。

void repalceFragment(Fragment fragment){
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.add(R.id.frame_layout,fragment);
        transaction.hide(treeFragment);
        transaction.addToBackStack(null);
        transaction.show(fragment);
        transaction.commit();
    }

这段代码执行后,界面是空白的,treeFragment被hide了,但是show好像不起作用。

 void repalceFragment(Fragment fragment){
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
//        transaction.hide(treeFragment);
//        transaction.add(R.id.frame_layout,fragment);
        transaction.replace(R.id.frame_layout,fragment);
        transaction.addToBackStack(null);
//        transaction.show(fragment);
        transaction.commit();
    }

使用replace也不能显示出来,应该是fragment的问题了。

果然,fragment的onCreateView中

return super.onCreateView(inflater, container, savedInstanceState);

没有return自己创建的view,改为

return rootView;

然后使用第一种切换方法完美符合需求。

在fragment中申请权限,可直接调用requestPermissions
在Activity中要调用ActivityCompat.requestPermissions

相关文章

网友评论

      本文标题:Fragment

      本文链接:https://www.haomeiwen.com/subject/uqwfwqtx.html