只用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
网友评论