600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 导航组件—Android应用中使用导航图

导航组件—Android应用中使用导航图

时间:2023-07-05 01:27:10

相关推荐

导航组件—Android应用中使用导航图

文章目录

一、 概述1.1 导航的概念1.2 导航的组成1.3 导航的优势二、 使用步骤2.1 步骤一:在应用级 build.gradle (非项目级build.gradle)文件中添加依赖2.2 步骤二:在项目级 build.gradle (非应用级build.gradle)文件中添加依赖2.3 步骤三:创建导航所涉及的Activity或Fragment2.4 步骤四:创建导航图(src/main/res/navigation/nav_login.xml)2.5 步骤五:设置导航图(src/main/res/navigation/nav_login.xml)2.6 步骤六:向 Activity 添加 NavHost2.7 步骤七:在Activity或Fragment的Java文件中使用导航动作三、 参考资料四、 结束语

一、 概述

1.1 导航的概念

导航是指支持用户导航、进入和退出应用中不同内容片段的交互。

1.2 导航的组成

导航组件由以下三个关键部分组成:

导航图:在一个集中位置包含所有导航相关信息的 XML 资源。这包括应用内所有单个内容区域(称为目标)以及用户可以通过应用获取的可能路径。NavHost:显示导航图中目标的空白容器。导航组件包含一个默认 NavHost 实现 (NavHostFragment),可显示 Fragment 目标。NavController:在 NavHost 中管理应用导航的对象。当用户在整个应用中移动时,NavController 会安排 NavHost 中目标内容的交换。

1.3 导航的优势

导航组件提供各种其他优势,包括以下内容:

处理 Fragment 事务。默认情况下,正确处理往返操作。为动画和转换提供标准化资源。实现和处理深层链接。包括导航界面模式(例如抽屉式导航栏和底部导航),用户只需完成极少的额外工作。Safe Args -可在目标之间导航和传递数据时提供类型安全的Gradle 插件。ViewModel 支持 - 您可以将 ViewModel的范围限定为导航图,以在图表的目标之间共享与界面相关的数据。


二、 使用步骤

2.1 步骤一:在应用级 build.gradle (非项目级build.gradle)文件中添加依赖

dependencies {def nav_version = "2.3.5"// Java language implementationimplementation ("androidx.navigation:navigation-fragment:$nav_version")implementation ("androidx.navigation:navigation-ui:$nav_version")// Feature module Supportimplementation ("androidx.navigation:navigation-dynamic-features-fragment:$nav_version")// Testing NavigationandroidTestImplementation ("androidx.navigation:navigation-testing:$nav_version")// Jetpack Compose Integrationimplementation ("androidx.navigation:navigation-compose:2.4.0-beta02")}

2.2 步骤二:在项目级 build.gradle (非应用级build.gradle)文件中添加依赖

dependencies {def nav_version = "2.3.5"classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version")}

2.3 步骤三:创建导航所涉及的Activity或Fragment

①创建导航所涉及的Activity,举例如下:

②创建导航所涉及的Fragment,举例如下:

2.4 步骤四:创建导航图(src/main/res/navigation/nav_login.xml)

新建导航图

在“Project”窗口中,右键点击 res 目录,然后依次选择 New > Android Resource File。此时系统会显示New Resource File 对话框。在 File name 字段中输入名称,例如“nav_login”。从 Resource type 下拉列表中选择 Navigation,然后点击 OK。

2.5 步骤五:设置导航图(src/main/res/navigation/nav_login.xml)

design窗口

导航图XML代码

<?xml version="1.0" encoding="utf-8"?><navigation xmlns:android="/apk/res/android"xmlns:app="/apk/res-auto"xmlns:tools="/tools"android:id="@+id/nav_login"app:startDestination="@id/loginFragment"><fragmentandroid:id="@+id/loginFragment"android:name="com.microdot.demo.fragment.login.LoginFragment"android:label="fragment_login"tools:layout="@layout/fragment_login" ><actionandroid:id="@+id/action_loginFragment_to_forgetPasswordFragment"app:destination="@id/forgetPasswordFragment" /><actionandroid:id="@+id/action_loginFragment_to_registerFragment"app:destination="@id/registerFragment" /><actionandroid:id="@+id/action_loginFragment_to_userAgreementFragment"app:destination="@id/userAgreementFragment" /><actionandroid:id="@+id/action_loginFragment_to_privacyAgreementFragment"app:destination="@id/privacyAgreementFragment" /><actionandroid:id="@+id/action_loginFragment_to_mainActivity"app:destination="@id/mainActivity" /></fragment><fragmentandroid:id="@+id/forgetPasswordFragment"android:name="com.microdot.demo.fragment.login.ForgetPasswordFragment"android:label="fragment_forget_password"tools:layout="@layout/fragment_forget_password" /><fragmentandroid:id="@+id/registerFragment"android:name="com.microdot.demo.fragment.login.RegisterFragment"android:label="fragment_register"tools:layout="@layout/fragment_register" /><fragmentandroid:id="@+id/userAgreementFragment"android:name="com.microdot.demo.fragment.login.UserAgreementFragment"android:label="fragment_user_agreement"tools:layout="@layout/fragment_user_agreement" /><fragmentandroid:id="@+id/privacyAgreementFragment"android:name="com.microdot.demo.fragment.login.PrivacyAgreementFragment"android:label="fragment_privacy_agreement"tools:layout="@layout/fragment_privacy_agreement" /><activityandroid:id="@+id/mainActivity"android:name="com.microdot.demo.activity.MainActivity"android:label="activity_main"tools:layout="@layout/activity_main" /></navigation>

2.6 步骤六:向 Activity 添加 NavHost

导航宿主是 Navigation 组件的核心部分之一。导航宿主必须派生于 NavHost。Navigation 组件的默认 NavHost 实现 (NavHostFragment) 负责处理 fragment 目的地的交换。

Navigation 组件旨在用于具有一个主 Activity 和多个 Fragment 目的地的应用。主 Activity 与导航图相关联,且包含一个负责根据需要交换目的地的 NavHostFragment。在具有多个 Activity 目的地的应用中,每个 Activity 均拥有其自己的导航图。

通过 XML 添加 NavHostFragment:

<androidx.fragment.app.FragmentContainerViewandroid:id="@+id/nav_host_fragment_login"android:name="androidx.navigation.fragment.NavHostFragment"android:layout_width="match_parent"android:layout_height="match_parent"app:defaultNavHost="true"app:navGraph="@navigation/nav_login" />

2.7 步骤七:在Activity或Fragment的Java文件中使用导航动作

@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// Inflate the layout for this fragment//使用binding视图绑定功能binding = FragmentLoginBinding.inflate(inflater, container, false);View view = binding.getRoot();binding.buttonLoginLogin.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_loginFragment_to_mainActivity, null));binding.textViewLoginOptionForgetPassword.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Navigation.findNavController(view).navigate(R.id.action_loginFragment_to_forgetPasswordFragment);}});binding.textViewLoginOptionRegister.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Navigation.findNavController(view).navigate(R.id.action_loginFragment_to_registerFragment);}});binding.checkBoxLoginAgreement.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Navigation.findNavController(view).navigate(R.id.action_loginFragment_to_userAgreementFragment);}});return view;}


三、 参考资料

https://developer./guide/navigation/navigation-getting-started#kts


四、 结束语

本文档为博主自主学习Android应用开发过程中的经验总结与心得体会,希望能在读者的学习道路上帮上一点点小忙,共同学习,共同成长。

欢迎读者评论留言,点赞,收藏,分享!


本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。