【Android】Navigation实现页面跳转

您所在的位置:网站首页 页面跳转中请用笔记好 【Android】Navigation实现页面跳转

【Android】Navigation实现页面跳转

2024-06-02 09:10| 来源: 网络整理| 查看: 265

在这里插入图片描述 Android为了推动SAA(Single Activity Application)的开发模式,在Jetpack中推出了Navigation,可以帮助大家方便地实现以往只有Activity才具备的,例如页面跳转、deeplink等。

接下来我会通过一个例子,让大家在10分钟之内掌握和完成Navigation的基本使用。 在这里插入图片描述

1. gradle依赖(1分钟) dependencies { .... implementation "android.arch.navigation:navigation-fragment:1.0.0" implementation "android.arch.navigation:navigation-ui:1.0.0" implementation "android.arch.navigation:navigation-fragment-ktx:1.0.0" implementation "android.arch.navigation:navigation-ui-ktx:1.0.0" } 2. 创建页面(4分钟)

需要完成四个页面

MainActivityFirstFragmentSecondFragmentThirdFragment MainActivity kt class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) } } xml FirstFragment kt class FirstFragment : Fragment() { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val view = inflater.inflate(R.layout.fragment_first, container, false) return view } } xml SecondFragment kt class SecondFragment : Fragment() { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val view = inflater.inflate(R.layout.fragment_second, container, false) return view } } xml ThirdFragment kt class ThirdFragment : Fragment() { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val view = inflater.inflate(R.layout.fragment_third, container, false) return view } } xml 3. 创建navigation_graph(3分钟)

通常在navigation文件下创建xml文件来配置页面的跳转信息 右击navigation文件夹,New -> Navigation resource file 新建`navigation_graph.xml’文件:

标签定义所有Fragment页面,标签定义页面跳转的配置信息:即通过指定android:id跳转到app:destination,navigation_graph.xml类似AndroidManifest中的作用

4. 应用navigation_graph(2分钟)

navigation_graph无法直接应用在Activity上,需要通过一个HostFragment进行配置

经过以上配置后,就可以在各个Fragment中实现页面跳转

//FirstFragment class FirstFragment : Fragment() { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val view = inflater.inflate(R.layout.fragment_first, container, false) view.button.setOnClickListener { findNavController().navigate(R.id.action_first_to_second) } return view } } //SecondFragment class SecondFragment : Fragment() { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val view = inflater.inflate(R.layout.fragment_second, container, false) view.button.setOnClickListener { findNavController().navigate(R.id.action_second_to_third) } return view } } //ThirdFragment class ThirdFragment : Fragment() { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val view = inflater.inflate(R.layout.fragment_third, container, false) view.button.setOnClickListener { findNavController().navigate(R.id.action_third_to_first) } return view } }

10分钟完成了基本的页面跳转。

5. 跳转动画

最后我们再花点时间为页面跳转加上动画,提高使用体验

navigation_graph.xml内中配置动画资源

也可以通过配置app:popEnterAnim、app:popExitAnim实现Dialog弹出的效果

6. popBackStack

navigation使用FragmentManager的stack管理页面的回退,点击back键后可以回退前一个页面,我们也可以通过popBackStack方法从ThirdFragment直接回到FirstFragment

class ThirdFragment : Fragment() { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val view = inflater.inflate(R.layout.fragment_third, container, false) view.button.setOnClickListener { findNavController().popBackStack(R.id.firstFragment, false) } return view } } 最后

本文简单介绍了如何使用Navigation实现页面跳转,Navigation更多用法,例如与Toolbar的配合、Deeplink等,欢迎从官网进行学习查阅 The Navigation Architecture Component



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3