我实现了一个bottomNavigationView,其中每个选项都有其条目片段,有些选项在同一个选项下有更多的导航。
某种程度上是这样的:
A-
B类-
C类-
D-
E类-
其中A, B, C, D
所需的导航是,应用程序的入口和出口点始终是选项A(入口片段A1)。因此,如果用户导航到另一个选项,只要该选项位于该选项的条目片段中,任何反向导航的行为都应该转到选项A。
我遇到的问题是,bottomNavigationView始终作为一个需求存在,因此用户可以随时导航到任何选项。
例如,如果用户导航到选项E,然后在E1中采取导航到E2的操作,然后导航到选项B,如果用户按下后退按钮,应用程序应该转到选项A,因为它在条目片段B1中。此外,如果用户使用底部导航视图导航到选项A,然后按下后退按钮,因为我们在退出点,我们应该完成应用程序。
在OnNavigationItemSelectedListener中,我使用beginTransaction替换当前片段作为所选选项的条目片段。替换除选项A以外的任何选项I添加添加到堆栈(null),但这本身并不匹配所需的导航,因为如果用户按下后退按钮,而不是导航到选项A,它将导航到之前选择的选项。A还尝试在替换片段之前使用popBackStack(back\u STACK\u HOME\u标记,FragmentManager.pop\u back\u STACK\u INCLUSIVE)和replacea adding(back\u STACK\u HOME\u标记)弹出back satch,但当选择第二个选项而不是显示所选选项的条目片段时,它会显示片段A1
navBar.setOnNavigationItemReselectedListener {
when(it.itemId) {
R.id.html" target="_blank">optionA -> {
// Removes all entries in the backstack if any
if (supportFragmentManager.backStackEntryCount > 0) {
supportFragmentManager.popBackStack(
null,FragmentManager.POP_BACK_STACK_INCLUSIVE
)
return@setOnNavigationItemSelectedListener true
}
// Replaces/add the entry fragment
supportFragmentManager.beginTransaction()
.replace(R.id.fragmentHost, FragmentA1())
.commit()
return@setOnNavigationItemSelectedListener true
}
R.id.optionB -> {
// Removes all entries in the backstack up to BACK_STACK_HOME_TAG
supportFragmentManager.popBackStack(
BACK_STACK_HOME_TAG,
FragmentManager.POP_BACK_STACK_INCLUSIVE
)
// Replace the fragment with the entry FragmentB1
supportFragmentManager.beginTransaction()
.replace(R.id.fragmentHost, FragmentB1())
.addToBackStack(BACK_STACK_HOME_TAG)
.commit()
return@setOnNavigationItemSelectedListener true
}
R.id.optionC -> {
// Removes all entries in the backstack up to BACK_STACK_HOME_TAG
supportFragmentManager.popBackStack(
BACK_STACK_HOME_TAG,
FragmentManager.POP_BACK_STACK_INCLUSIVE
)
// Replace the fragment with the entry FragmentC1
supportFragmentManager.beginTransaction()
.replace(R.id.fragmentHost, FragmentC1())
.addToBackStack(BACK_STACK_HOME_TAG)
.commit()
return@setOnNavigationItemSelectedListener true
}
...
return@setOnNavigationItemSelectedListener false
}
}
override fun onBackPressed() {
if (supportFragmentManager.backStackEntryCount > 0) {
supportFragmentManager.popBackStack()
return
}
super.onBackPressed()
}
仅在添加片段A1时设置BACK\u STACK\u HOME\u标记状态。添加片段B1、C1、D1时无需返回状态
重写片段A1中的onKeyDown(),使其退出应用程序:系统。退出(0)
重写片段B1、C1、D1中的onKeyDown()。。。,将其设置回A1,如:fragmentManager()。popBackStack(BACK\u STACK\u HOME\u标记,0)
fragmentManager()。popBackStack()
您应该只重写活动。OnBackPressed()方法,该方法位于每个活动都将继承的BaseActivity中。在该函数中,只需检查当前活动的类型是否为A。如果是,请退出应用程序,否则,启动活动A。
我的主要活动中有一个底部导航栏。通过单击底部导航中的一个选项卡,我想更改视图中的片段。我有以下代码:主要活动: } 我的一个片段: 如果我单击其中一个选项卡,就会显示正确的片段,因此这是可行的。然而,当新片段出现时,我想单击另一个选项卡来显示另一个片段,这就行不通了。底部导航栏不会对单击做出反应。甚至日志。i语句不起作用,因此似乎没有调用导航项SelectedListener。 我对android
我遇到了一个问题,当深度链接到第二级片段时,导航UI没有选择正确的底部导航视图项。 我的意思是: 选择fragment_reading_lists:选择正确的底部导航项 从fragment_reading_lists导航- 当我深入链接到fragment\u discover\u landing时会发生什么?选择默认的底部导航项目。 是否有方法通知底部导航适配器在此实例中应选择哪个项目? 这是我的
我的应用程序有问题。我有一个底部导航视图,包含3个不同的片段,尽管目前只有主要的内容。当我试图从左侧的两个片段中的一个移动到主视图时,问题就出现了,即当底部导航视图被隐藏时。我附上了主代码。 PD:我有25.3.1版本的所有库(如果有用的话)。 感谢您的关注。 activity\u main。xml 主要活动。Java语言 我也给你添加了两张图片。 Ofertas片段 主片段
但是,当我初始化BottomNavigationView时,我会得到: 我正在从一个片段初始化BottomNativigationView。我猜这就是问题所在,但我想不出解决办法。 下面是为片段设置导航的活动的BottomNavigationView xml。
我正在向项目中添加一个底部导航视图(BottomNavigationView),我希望所选选项卡具有不同的文本(和图标色调)(以实现灰显非所选选项卡的效果)。在颜色选择器资源文件中对android:state\u selected=“true”使用不同的颜色似乎不起作用。我还尝试使用android:state\u-focused=“true”或android:state\u-enabled=“tr
我试图创建一个单一活动的Android应用程序。我有带有BottomNavigationView的MainActivity (only activity),三个顶级片段和一些子片段。我的要求是,每当屏幕显示顶级片段,底部导航应该是可见的,这样切换是可能的。但是当我查看任何子片段时,底部导航应该是隐藏的。是否有任何现成的方式使用导航组件或需要手动更改可见性?