我有一个包含RecyclerView
的片段。当单击一个项目时,我正在导航(使用导航组件)到一个细节片段。
在细节片段中,我想实现AppBarLayout
。但是我已经在活动级别上有了一个工具栏。
我怎么才能实现这样的事情呢?你可以在Google design guidelines上找到这段视频。不确定他们是否要开始新的活动。底部导航也是我活动的一部分,在使用AppBarLayout
导航到detail fragment时应该是可见的。
发布于 2021-09-16 13:31:17
在细节片段中,我想实现AppBarLayout。但是我已经在活动级别上有了一个工具栏。
因此,现在该活动有了一个工具栏,您想要在DetailFragment
中设置另一个toolbar。当您使用导航组件时,您可能会使工具栏由navController
进行管理
这就要求您将活动级别的toolBar移到由navHostFragment
托管的主片段中。
原因:,因为从片段级别设置另一个工具栏将复制它,因为活动级别的工具栏始终存在。Check this answer就是这样的。
因此,您需要在片段中设置toolBar;通常,当您通过导航组件从一个片段移动到另一个片段时,不会发生复制,现在您可以根据需要拥有不同的工具栏。
这里是一个示意图演示:
活动:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
fun setupActionBar(toolbar: Toolbar) {
setSupportActionBar(toolbar)
val navHostFragment =
supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
val navController = navHostFragment.navController
val appBarConfiguration = AppBarConfiguration.Builder(
R.id.fragment, R.id.fragment_b
) .build()
NavigationUI.setupActionBarWithNavController(
this,
mNavController,
navController
)
}
}
FragmentA
class FragmentA : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val view = inflater.inflate(R.layout.fragment_a, container, false)
(requireActivity() as MainActivity).setupActionBar(view.findViewById(R.id.fragment_toolbar))
return view
}
}
FragmentB:类似于FragmentA,但有自己的toolBar
class FragmentB : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val view = inflater.inflate(R.layout.fragment_b, container, false)
(requireActivity() as MainActivity).setupActionBar(view.findViewById(R.id.fragment_toolbar))
return view
}
}
https://stackoverflow.com/questions/69213124
复制相似问题