如何用代码实现一个Android 主页导航架构图
这篇文章也可以帮你一次性理清adapter,fragment,NavHostFragment,tabLayout,viewpager2同时应用的场景。以食谱为例,当然你也可以用这个架构实现新闻,社交平台等其他应用。本文章仅针对xml布局,不包含Conpose
总结构图:

一.如何通过adapter绑定activity和fragment
准备工作,创建一个MainActivity,三个Fragment(HomeFragment主页,FavoriteFragment收藏页,JokeFragment故事页)
1.MainActivity中该做的事情:
1.我们在MainActivity的xml中拖入一个viewpager2,和一个TabLayout,调整一下它们之间的布局关系和大小,不需要配置任何参数,后面会在代码中配置

2.然后在MainActivity中使用TabLayoutMediater方法来绑定(oncreate方法里面):
TabLayoutMediator(mBinding.tabLayout,mBinding.viewPager){tab , position ->
when(position) {
0 -> {
tab.setIcon(R.drawable.ic_recipe)
tab.setText("食谱")
}
1 -> {
tab.setIcon(R.drawable.ic_star)
tab.setText("收藏")
}
2 -> {
tab.setIcon(R.drawable.ic_face)
tab.setText("谚语")
}
}
}.attach()
代码中的mBinding.tabLayout,mBinding.viewPager是控件的Id
这样我们就绑定了tablayout和viewpage2
2.在adapter里面该做的事情:
1.先创建一个adapter(MainAdapter)
class MainAdapter(fragmentActivity: FragmentActivity): FragmentStateAdapter(fragmentActivity) {
override fun createFragment(position: Int): Fragment {
return when(position){
0 -> HomeFragment()
1 -> FavoriteFragment()
else -> JoKeFragment()
}
}
override fun getItemCount(): Int {
return 3
}
}
这两个方法必须实现,用来绑定我们viewpager2和三个fragment之间的关系
2.在MainActivity中绑定我们的adapter
mBinding.viewPager.adapter = MainAdapter(this)
mBinding.viewPager.isUserInputEnabled = false
我们禁止滑动,用户有更好的交互体验
这样,我们就实现了Activity,TabLayout,Fragment,Veiwpager2的四重绑定
下面是结构图:

二.如何在一个Framgent中实现实现多个界面,也就是一个Fragent中有多个Fragment
准备工作,在一个Fragment(这里是HomeFragment)中创建3个Fragment(recipesFragment,detailsFragment,searchTypeFragment)
1.创建一个recipes_graph来管理三个fragment之间的关系
1,在res下面先创建一个navigation文件夹,再在里面添加recipe_graph文件
2.在recipe_graph中配置把三个fragment拉进来,再用箭头配置它们之间的关系

2.HomeFragment绑定recipe_graph
1.在HomeFragment的xml文件中拖入一个FragmentContainerView
<androidx.fragment.app.FragmentContainerView
android:id="@+id/fragmentContainerView"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/recipe_graph" />
2.配置app:navGraph="@navigation/recipe_graph"这一行来绑定recipe_graph
这样,我们就绑定了HomeFragment和三个子Fragment
下面是结构图

更多推荐



所有评论(0)