首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在使用导航组件实现的BottomNavigationView中,每次在片断之间切换时片断都会重新启动

。这是因为BottomNavigationView默认使用的是FragmentTransaction的replace方法来切换片断,该方法会销毁当前片断并创建新的片断实例。

为了避免片断重新启动,可以使用FragmentTransaction的hide和show方法来切换片断。具体步骤如下:

  1. 在Activity中创建BottomNavigationView,并设置相应的菜单项和片断容器。
  2. 在Activity中创建片断实例,并使用FragmentTransaction的add方法将片断添加到片断容器中。
  3. 在BottomNavigationView的OnNavigationItemSelectedListener中,根据菜单项的选择,使用FragmentTransaction的hide和show方法来切换片断的可见性。

这样,当切换菜单项时,片断不会重新创建,而是保持之前的状态。

下面是一个示例代码:

代码语言:txt
复制
// 创建BottomNavigationView
BottomNavigationView bottomNavigationView = findViewById(R.id.bottom_navigation_view);

// 设置菜单项点击监听器
bottomNavigationView.setOnNavigationItemSelectedListener(item -> {
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    switch (item.getItemId()) {
        case R.id.menu_item1:
            // 使用hide和show方法切换片断的可见性
            transaction.hide(fragment2);
            transaction.show(fragment1);
            break;
        case R.id.menu_item2:
            transaction.hide(fragment1);
            transaction.show(fragment2);
            break;
    }
    transaction.commit();
    return true;
});

// 创建片断实例
Fragment1 fragment1 = new Fragment1();
Fragment2 fragment2 = new Fragment2();

// 将片断添加到片断容器中
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.add(R.id.fragment_container, fragment1);
transaction.add(R.id.fragment_container, fragment2);
transaction.commit();

在上述示例中,R.id.bottom_navigation_view是BottomNavigationView的ID,R.id.fragment_container是片断容器的ID。Fragment1和Fragment2分别是要切换的两个片断。

这样,使用导航组件实现的BottomNavigationView在切换片断时就不会重新启动片断,而是保持之前的状态。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

安卓Navigation系列——进阶篇

前言 上篇对Navigation一些概念进行了介绍,并在前言中提到了app中常用一个场景,就是app首页,一般都会由一个activity+多个子tab组成,这种场景有很多种实现方式,比如可以使用RadioGroup...是谷歌一个实现底部导航组件, app:menu属性为底部导航栏指定元素,新建一个bottom_nav_menumenu资源文件 <?...()方法可以看出,mGraphId就是布局文件定义NavHostFragment,通过app:navGraph属性指定导航资源文件, 跟进setGraph()方法, public void...我们知道replace方法每次都会重新创建fragment,所以使用Navigation创建底部导航页面,每次点击切换页面当前fragment都会重建。...总结 本篇在上篇基础上,结合BottomNavigationView实现了第一个底部导航切换实例,然后介绍了这种方式引发坑,进而通过源码分析了发生这种现象原因,并给出了解决思路。

2.9K30

Android开发之漫漫长途 XIII——Fragment最佳实践

其实上面的代码存在性能问题,尤其是底部导航这种场景,Fragment之间来回切换,这里使用replace方法。关于这个方法带来问题以及如何进行优化,将在下一节详细说明。...Fragment性能问题分析与解决 Fragment性能问题分析 我们上面是使用replace来切换页面,那么每次切换时候,Fragment都会重新实例化,重新加载一边数据,这样非常消耗性能和用户数据流量...这是因为replace操作,每次都会把container现有的fragment实例清空,然后再把指定fragment添加进去,就就造成了切换到以前fragment,就会重新实例会fragment...我们不能使用replace来进行页面的切换,那么可使用方法貌似只有add了,我们可以加载时候判断Fragment是不是已经被添加到队列,如果已添加,我们就显示(show)该Fragment,隐藏...,我们来回切换操作,Fragment只实例一次,少了销毁又重新创建等带来性能消耗,另我们想要在Fragment更新数据,我们可以自定义Fragment重写其onHiddenChanged

1.2K20

写一个MVVM快速开发框架:谈一谈“单Activity+多Fragment”模式

管理Fragment栈 我们可以使用navigation管理fragment,fragment之间跳转、栈管理都轻而易举,navigation还可以设置切换动画、页面间数据传递。...Navigation可以理解为以一个管理fragment容器,容器各个fragment可以实现任意跳转, 基础使用: 我们需要在布局创建Fragment容器: <androidx.fragment.app.FragmentContainerView...Navigation 我们通常使用底部导航栏将app划分出不同功能,这些都是单独module,但是navigation怎么进行module间跳转呢?...moduel间切换,但是我发现这种方法每次切换naviagtion都会重新初始化,导致性能消耗很大。...使用menuid与navGraph设置成一样啊哈哈哈哈 基本上ARouter+Navigation可以满足大部分页面跳转需求,但还是有一些难点,就是不同moduel之间navGraph怎么相互控制

1.4K40

深入浅出 NavigationUI | MAD Skills

这是第二个关于导航 (Navigation) MAD Skills 系列,如果您想回顾过去发布内容,请参考下面链接查看: 导航组件概览 导航到对话框 应用中导航使用 SafeArgs 使用深层链接导航...本文中,我们将为大家讲解另外一个用例,即类似操作栏 (Action Bar)、底部标签栏或者抽屉型导航栏之类 UI 组件如何在应用实现导航功能。...我需要在应用增加一些页面,所以有必要使用抽屉式导航栏或者底部标签栏来辅助用户导航。但是我们该如何使用这些 UI 组件来集成导航功能呢?通过点击监听器手动触发导航动作吗? 不需要!无需任何监听器。...NavigationUI 类通过匹配目标页面 id 与菜单 id 实现不同页面之间导航功能。让我们深入探索一下它内部机制吧。...为了使代码保持整洁、各个元素之间更加清晰,我们会在新方法实现相关操作,并且 onCreate() 调用该方法。

3K30

liferay portal介绍

通常,portlet动作会被portal接受,从而用户与portlet内容交互(比如点击portlet链接,提交form),提交到portlet目标。   ...Portal 和 Portal 容器可以放在一起视为同一个系统组件,或者分开成为两个独立组件。...容器使用者(即Portal,译者 注)必须实现portlet 容器Container Provider SPI(Service ProviderInterface)回调接口,来为portlet 容器提供与...Portlet 产生标记片断。Portal 通常给portlet 产生标记片断加了标题,控制按钮和其他装饰,这个新片断叫portlet 窗口。...客户使用客户终端访问portal。收到请求后,portal 判断满足请求portlets 列表。Portal 通过portlet 容器,调用portlets。

2K30

自定义View:手撸一个带FAB凹槽底部导航

导航栏与页面跳转:使用谷歌官方提供现成组件BottomNavigationView+Navigation组件+Fragment方式来实现; FAB停靠导航栏:利用协调者布局CoordinatorLayout...由于谷歌官方有现成导航相关组件BottomNavigationView和Navigation组件,一般来说如果没什么特殊需求的话只需要自己定义下导航路由图和底部导航菜单menu文件,定义导航item...以及每个item对应页面使用Fragment组件实现,页面跳转、item切换动画等相关功能都是现成,方便快捷。...假设按钮垂直方向上的当前位移距离大小为d,当按钮向上运动导航栏上凹槽应该往中间收缩,收缩过程中保持两旁小圆半径大小和30°夹角不变,这时另中间圆圆心同步垂直方向上移动-d,动态修改distance...值,由此一来可以达到凹槽收缩效果,按钮向下运动同理: 另外还需要考虑按钮完全位于导航栏上方情况,这种情况下直接使用直线来代替原来曲线部分。

7710

【专业技术】OpenGL操作技巧介绍

存在问题: opengl如何渲染管线? 解决方案: 绝大数OpenGL实现都有相似的操作顺序,一系列相关处理阶段称为OpenGL渲染管线。...6 纹理装配Texture Assembly OpenGL 应用程序可以几何物体上应用纹理图像,使它们看上去更为逼真。如果需要使用多幅纹理图像,把它们放在纹理对象是一种明智做法。...这样,就可以很方便地 在他们之间进行切换。有些 OpenGL 实现拥有一些特殊资源,可以加速纹理处理。这种资源可能是专用,高性能纹理内存。...每个片断方块对应用 于帧缓冲区一个像素。把顶点连接起来形成直线或者计算填充多边形内部像素,需要考虑直线和多边形点画模式,直线宽度,点大小,着色模型以及 用于支持抗锯齿处理覆盖计算。...第一个可能执行操作纹理处理。纹理内存为每个片断 生成一个纹理单元(texel,也就是纹理元素),并应用到这个片断上。

1.3K20

1. Jetpack源码解析---看完你就知道Navigation是什么了?

基本使用 虽然之前文章已经很详细介绍了Navigation,但是这里也简单叙述一下我项目中具体使用: 2.1 Navigation+DrawerLayout+ToolBar 我们可以通过使用...,但是需要你填写类全路径,同时你要保证实体类实现了序列化 我们可以通过把参数传递封装到Bundle,然后再执行navigate()方法传递过去,例如: val args = Bundle()...它继承了Navigator,查看注释我们知道它是为每个Navigation设置策略,也就是说Fragment之间通过导航切换都是由它来操作,下面会详细介绍,这里先简单看下。...这样就将组件状态切换绑定起来了,当fragment切换,上面提到接口分发,去切换布局按钮等状态。...4.3.2 NavController NavContorller是整个导航组件核心,通过它来加载xmlfragment节点转化成NavDestination,并保存在栈内,通过navigate()

2.5K30

ASM字节码插桩

时间和当前时间,然后进行对比,判断用户是否为重新启动APP,还是仅仅切换到后台再切换回来。...使用AspectJ, 思路:程序编译期间,相应onClick方法调用前或后插入埋点代码。...dex 效率 -- 比java中使用反射快,ASM官网也有介绍。...ASM设计和实现是尽可能小和尽可能快,所以它非常适合在动态系统中使用(但当然也可以以静态方式使用,例如在编译器中使用)。 更多关于框架ASM远离和具体使用在这里就不赘述了。 如何使用?...: 先判断该类实现接口是否包含OnNavigationItemSelectedListener接口,接着判断实现该接口方法是不是onNavigationItemSelected,如果符合,那么代表这个类包含该接口并实现了方法

93850

硬盘电路详解

对于硬盘缓冲区,它实现了计算机其余部分与用于存储物理硬盘盘片之间缓冲作用。缓冲管理器将缓冲RAM分割成独立缓冲片断,微处理器使用专门寄存器保存这些缓冲片断地址以供存取操作。...当主机使用其中一个缓冲片断交换数据,读/写信道可以使用另外缓冲片断交换数据。这样系统可以实现多通道处理从/向磁盘读/写数据或与主机之间数据交换。...硬盘缓冲区物理上不同于通常由操作系统保存在计算机主内存页面缓存,并且其使用方式也不同:硬盘缓冲区由硬盘驱动器微控制器控制,页面缓存由磁盘所连接计算机控制;硬盘缓冲区通常很小,现代硬盘缓冲RAM...容量一般为16~64MB ,页面缓存通常都是未使用主内存;页面缓存数据被多次重用,但硬盘缓冲区数据很少被重用。...PRML Read Channel:Partial-Response Maximum-Likelihood 读通道: 当存储设备记录密度低每次写入磁介质跃迁都会产生一个相对孤立电压峰值,采用峰值检测方法恢复写入信息

1.7K20

Android Navigation + Fragment 制作APP主页面导航(步骤 + 源码)

那么来看看本文中实现效果是怎么样。如果不满意,我想也就不浪费你时间了。 ? ---- 正文   从上面的一些APP主页面,之前这种页面是通过什么来做呢?...NavController:得知切换目标,控制NavHost去显示B这个Fragment。 这么一说,你是否有一些理解了呢? 2....navigate,表示导航意思,这里面我传入了刚才定义nav_graph.xmlactionid。...很明显,跳过去了,不过感觉还少了点什么,因为平常Fragment之间跳转都会传递参数过去,那么这个也要传参数,而Navigation也提供了这个功能,可以通过Bundle进行传参。...底部导航栏控制Fragment切换 在上面已经添加了底部导航栏,但是这个导航栏还没有和NavHost绑定起来,所以自然就无法切换底部导航同时,改变NavHostFragment。

8.7K42

Android_Jetpack组件---Naviagtion源码解析

基本使用 虽然之前文章已经很详细介绍了Navigation,但是这里也简单叙述一下我项目中具体使用: 2.1 Navigation+DrawerLayout+ToolBar 我们可以通过使用...,但是需要你填写类全路径,同时你要保证实体类实现了序列化 我们可以通过把参数传递封装到Bundle,然后再执行navigate()方法传递过去,例如: val args = Bundle()...它继承了Navigator,查看注释我们知道它是为每个Navigation设置策略,也就是说Fragment之间通过导航切换都是由它来操作,下面会详细介绍,这里先简单看下。...这样就将组件状态切换绑定起来了,当fragment切换,上面提到接口分发,去切换布局按钮等状态。...4.3.2 NavController NavContorller是整个导航组件核心,通过它来加载xmlfragment节点转化成NavDestination,并保存在栈内,通过navigate()

2.1K10

1. Jetpack源码解析---看完你就知道Navigation是什么了?

基本使用 虽然之前文章已经很详细介绍了Navigation,但是这里也简单叙述一下我项目中具体使用: 2.1 Navigation+DrawerLayout+ToolBar 我们可以通过使用...当然fragment之间切换是支持动画,NavOptions是一个动画管理类,我们可以设置进入和回退动画,设置方式有两种: 直接在标签设置动画 <action android:id="@+id...它继承了Navigator,查看注释我们知道它是为每个Navigation设置策略<em>的</em>,也就是说Fragment<em>之间</em>通过<em>导航</em><em>切换</em>都是由它来操作<em>的</em>,下面会详细介绍<em>的</em>,这里先简单看下。...这样就将<em>组件</em><em>的</em>状态<em>切换</em>绑定起来了,当fragment<em>切换</em><em>时</em>,上面提到<em>的</em>接口分发,去<em>切换</em>布局按钮等状态。...4.3.2 NavController NavContorller是整个<em>导航</em><em>组件</em><em>的</em>核心,通过它来加载xml<em>中</em>fragment节点转化成NavDestination,并保存在栈内,通过navigate()

2.1K20

Android底部导航——BottomNavigationView+ViewPager+Fragment

Android端底部导航栏有着一套规范,详情 这篇文章为大家带来 1.官方BottomNavigationView使用方法 2.结合ViewPager、Fragment实现一个流行UI布局!...最终实现效果: 谷歌官方发布BottomNavigationView控件之前我们可以自己组合控件实现,比如LinearLayout + TextView(使用android:drawableTop...属性+selector状态切换)、RadioGroup + RadioButton等等组合控件方法自定义实现复杂效果。...= (BottomNavigationView) findViewById(R.id.bottom_navigation); //默认 >3 选中效果会影响ViewPager滑动切换效果...3个menu item及以下默认关闭,而到了4个及以上就懵逼了,因为我们是要做ViewPager侧滑。

2K20

玩转 Tomcat 配置必备 10 个小技巧!

如果我们有一个新web应用位于/home/user/hello下在,并且想把它安装到/hello下,为了测试这个应用,我们可以这么做,第一个文件框输入“/hello”(作为访问path),第二个文本框输入...举个例子,如果我们想部署一个名叫MyWebApp.war应用,该应用使用realm作为访问控制方式,我们可以使用下面这个片断: <!...只需要添加 和 两个元素到你web应用web.xml文件,并且CATALINA_BASE/conf/tomcat-users.xml文件添加适当 和 即可,然后重新启动Tomcat。...一般说来,对用户而言登录系统是一件很麻烦事情,你必须尽量减少用户登录验证次数。作为缺省情况,当用户第一次请求受保护资源,每一个web应用都会要求用户登录。...使用单点登录web应用最好使用一个Tomcat内置验证方式(被定义web.xml ),这比自定义验证方式强,Tomcat内置验证方式包括basic、digest、form和client-cert

61710

Android Notes|BottomNavigationView 爱上 Lottie

以前大部分项目底部导航栏关于图片部分实现,要么两套图 selector 切换,要么通过着色器 tint 进行渲染,总之最后呈现效果便是点击两张图静态切换,说 Low 吧,也还凑合,但是总是没那么高大上...项目重构,韩总说了,之前方式呈现效果太 Low 了,这次重构要求底部要动。(内心默默来句,你咋不上天。) 先来看个两者间对比效果吧~ 效果对比 原有两张静态图切换: ? 小动画浪起来: ?...前期介绍 针对目前使用 BottomNavigationView 以及 Lottie 简单记录下,以便日后遗忘直接查看。 1....而关于选中状态切换,对应标题字体大小发生改变以及导航栏高度,都可以通过 dimens 定义如下解决: <!...身为猿猿,面对实际开发遇到问题,一定要采取多方案,首要保证内容、结果输出,其次才是合理循循渐进优化。 2、BottomNavigationView Item 长按提示怎么搞掉?

3.7K21

1、DefaultHttpControllerTypeResolver

如下面的代码片断所示,DefaultAssembliesResolver实现GetAssemblies方法中直接返回当前应用程序域加载所有程序集列表。...从如下代码片断可以看出WebHostAssembliesResolver实现GetAssemblies方法中直接通过调用BuildManagerGetReferencedAssemblies方法来获取最终提供程序集...具体缓存实现在具有如下定义HttpControllerTypeCache类型,这是一个定义程序集“System.Web.Http.dll”内部类型。...标准化组件”一定是注册到当前ServicesContainer上被HttpController激活系统使用。...与上面我们介绍那些“标准化组件”不同,默认使用DependencyResolver并未注册到当前ServicesContainer对象上,而是直接注册到了当前HttpConfiguration上面

41810
领券