Android(安卓)Fragment动态创建时replace()和add()方法的区别
16lz
2021-01-26
1、replace()顾名思义“替换”,会销毁布局容器内的已有视图,这样会导致每次切换Fragment时都会重新初始化,浪费流量。
//获取碎片管理者fragmentManager = getSupportFragmentManager();//事务是不能共享的,每次用到都要重新开启一个事务,之后提交FragmentTransaction fragmentTransactiontwo = fragmentManager.beginTransaction();//参数:1.父容器 2.要替换的fragment。fragmentTransactiontwo.replace(R.id.framelayout, fragmentTwo);//提交事务fragmentTransactiontwo.commit();
因此,如果你有一个很高的概率会再次使用当前的Fragment,建议使用add()搭配show(),
hide()使用
,可以提高用户体验。
2、add()是添加Fragment于容器布局中,再搭配事务对象的show()和hide()方法来显示和隐藏,它们最终是让FragmentsetVisibility
(true还是false),不会调用生命周期。
homepageFragment = new HomepageFragment(); hotFragment = new HotFragment(); meFragment = new MeFragment(); getSupportFragmentManager().beginTransaction() .add(R.id.content_fragment_layout,homepageFragment, "homepageFragment") .add(R.id.content_fragment_layout,hotFragment,"hotFragment") .add(R.id.content_fragment_layout,meFragment,"meFragment") .show(homepageFragment) .hide(hotFragment) .hide(meFragment) .commit();
在跳转前将当前的fragment隐藏,要显示的frment进行显示:
/*3、初始化底部导航菜单*/ private void initBottomNavigationView() { bottomNavigationView= (BottomNavigationView)findViewById(R.id.bottom_navigation); bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.bottom_navigation_homepage: topView.setVisibility(View.VISIBLE); toolbar.setVisibility(View.VISIBLE); getSupportFragmentManager().beginTransaction() .show(homepageFragment) .hide(hotFragment) .hide(meFragment) .commit(); break; case R.id.bottom_navigation_find: topView.setVisibility(View.GONE); toolbar.setVisibility(View.GONE); getSupportFragmentManager().beginTransaction() .show(hotFragment) .hide(homepageFragment) .hide(meFragment) .commit(); break; case R.id.bottom_navigation_me: topView.setVisibility(View.GONE); toolbar.setVisibility(View.GONE); getSupportFragmentManager().beginTransaction() .show(meFragment) .hide(homepageFragment) .hide(hotFragment) .commit(); break; } return true; } }); }
更多相关文章
- android中Canvas使用drawBitmap绘制图片
- Android(安卓)studio git 中文乱码 不显示中文
- Android(安卓)Studio自带模版:抽屉(DrawerLayout)布局
- 纯Java代码写登录注册页面
- Android(安卓)DES AES MD5加密
- Android(安卓)EditText简单实现右侧点击清除
- Android中常见的设计模式
- android 多行文本显示的textView
- 一个android 异步多线程类介绍