Android jetpack Navigation 动画与参数 效果与安全
Posted 安果移不动
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android jetpack Navigation 动画与参数 效果与安全相关的知识,希望对你有一定的参考价值。
接上篇博客
添加动画首先要选中action
然后点击右边的动画
添加上动画然后就可以啦。这里动画时间很短150ms 如果想看效果 可以自己复制一份改改那样效果会好很多
修改详情页面的布局
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/my_nav_graph"
app:startDestination="@id/homeNavigationFragment">
<fragment
android:id="@+id/homeNavigationFragment"
android:name="com.anguomob.jecpack.fragment.HomeNavigationFragment"
android:label="fragment_home_navigation"
tools:layout="@layout/fragment_home_navigation" >
<action
android:id="@+id/action_homeNavigationFragment_to_detailNavigationFragment"
app:destination="@id/detailNavigationFragment"
app:enterAnim="@anim/nav_default_enter_anim"
app:exitAnim="@anim/nav_default_exit_anim"
app:popEnterAnim="@anim/nav_default_pop_enter_anim"
app:popExitAnim="@anim/nav_default_pop_exit_anim" />
</fragment>
<fragment
android:id="@+id/detailNavigationFragment"
android:name="com.anguomob.jecpack.fragment.DetailNavigationFragment"
android:label="fragment_detail_navigation"
tools:layout="@layout/fragment_detail_navigation" >
<action
android:id="@+id/action_detailNavigationFragment_to_homeNavigationFragment"
app:destination="@id/homeNavigationFragment" />
</fragment>
</navigation>
上面加了个Text用来显示传递过来的数据
传递参数
使用Bundle
home点击的时候传递进去
binding.btHome.setOnClickListener
val args=Bundle();
args.putString("username","jack")
val findNavController = Navigation.findNavController(it)
findNavController.navigate(R.id.action_homeNavigationFragment_to_detailNavigationFragment,args)
detail接受的时候展示出来
override fun onActivityCreated(savedInstanceState: Bundle?)
super.onActivityCreated(savedInstanceState)
val username = arguments?.getString("username");
binding.tvUserName.text = username ?: "没传递过来数据"
binding.btDetail.setOnClickListener
val findNavController = Navigation.findNavController(it)
findNavController.navigate(R.id.action_detailNavigationFragment_to_homeNavigationFragment)
但是这种方式如果使用
val username = arguments?.getInt("username");
getInt那么就会为0
有点不严谨的意思
所以Navigation提供了更好的方式safe-args
修改
my_nav_graph.xml
在要跳转的页面 也就是home 要往detail 跳转 就是设置home上面
添加
<argument
android:name="username"
android:defaultValue="未知"
app:argType="string" />
<argument
android:name="age"
app:argType="integer"
android:defaultValue="0"
/>
integer 是代表int string不必多说
添加依赖
kt方式与java不同
这里主要讲
kt
项目级别build.gradle (java可能不需要。需要你们java同学自己试试)
buildscript
dependencies
classpath("androidx.navigation:navigation-safe-args-gradle-plugin:2.4.2")
但是java app级别需要添加 (kt不需要添加这句话 我已经试过了)
implementation 'androidx.navigation:navigation-safe-args-gradle-plugin:2.4.2'
kt app级别 顶部
id 'androidx.navigation.safeargs.kotlin'
java
androidx.navigation.safeargs
java的话就不要完全模仿kotlin了。初始化方式也不相同
homeFragment
java方式应该是
HomeNavigationFragmentArgs.Build().setUserName("jack").setAge(18).build().toBundle()
kt
val args = HomeNavigationFragmentArgs("jack",18).toBundle()
val findNavController = Navigation.findNavController(it)
findNavController.navigate(
R.id.action_homeNavigationFragment_to_detailNavigationFragment,
args
)
detailFragment 接受数据 这个java和kt是一样的
override fun onActivityCreated(savedInstanceState: Bundle?)
super.onActivityCreated(savedInstanceState)
arguments?.let
val args = HomeNavigationFragmentArgs.fromBundle(it);
val username = args.username
val age = args.age
binding.tvUserName.text = "username:" + username + "age:" + age ?: "没传递过来数据"
binding.btDetail.setOnClickListener
val findNavController = Navigation.findNavController(it)
findNavController.navigate(R.id.action_detailNavigationFragment_to_homeNavigationFragment)
有的网友觉得过程反而更复杂了。
有的网友觉得更加清晰了。
各有利弊吧。那就是
以上是关于Android jetpack Navigation 动画与参数 效果与安全的主要内容,如果未能解决你的问题,请参考以下文章
Android Jetpack架构组件带你了解Android Jetpack
Android Jetpack架构组件——什么是Jetpack?
Android Jetpack架构组件——什么是Jetpack?