Android Jetpack从入门到精通(深度好文,值得收藏

| 属性 | 解释 |

| — | — |

| app:startDestination | 默认的起始位置 |

第三步 建立NavHostFragment

我们创建一个新的LoginActivity,在activity_login.xml文件中:

<androidx.constraintlayout.widget.ConstraintLayout

…>

<fragment

android:id=“@+id/my_nav_host_fragment”

android:name=“androidx.navigation.fragment.NavHostFragment”

app:navGraph=“@navigation/login_navigation”

app:defaultNavHost=“true”

android:layout_width=“match_parent”

android:layout_height=“match_parent”/>

</androidx.constraintlayout.widget.ConstraintLayout>

有几个属性需要解释一下:

| 属性 | 解释 |

| — | — |

| android:name | 值必须是androidx.navigation.fragment.NavHostFragment,声明这是一个NavHostFragment |

| app:navGraph | 存放的是第二步建好导航的资源文件,也就是确定了Navigation Graph |

| app:defaultNavHost="true" | 与系统的返回按钮相关联 |

第四步 界面跳转、参数传递和动画

WelcomeFragment中,点击登录和注册按钮可以分别跳转到LoginFragmentRegisterFragment中。

image

这里我使用了两种方式实现:

方式一 利用ID导航

目标:WelcomeFragment携带keyname的数据跳转到LoginFragmentLoginFragment接收后显示。

Have a account ? Login按钮的点击事件如下:

btnLogin.setOnClickListener {

// 设置动画参数

val navOption = navOptions {

anim {

enter = R.anim.slide_in_right

exit = R.anim.slide_out_left

popEnter = R.anim.slide_in_left

popExit = R.anim.slide_out_right

}

}

// 参数设置

val bundle = Bundle()

bundle.putString(“name”,“TeaOf”)

findNavController().navigate(R.id.login, bundle,navOption)

}

后续LoginFragment的接收代码比较简单,直接获取Fragment中的Bundle即可,这里不再出示代码。最后的效果:

方式二 利用Safe Args

目标:WelcomeFragment通过Safe Args将数据传到RegisterFragmentRegisterFragment接收后显示。

再看一下已经展示过的login_navigation.xml

<navigation

…>

<fragment

/>

<fragment

android:id=“@+id/welcome”

<action

android:id=“@+id/action_welcome_to_login”

app:destination=“@id/login”/>

<action

android:id=“@+id/action_welcome_to_register”

app:enterAnim=“@anim/slide_in_right”

app:exitAnim=“@anim/slide_out_left”

app:popEnterAnim=“@anim/slide_in_left”

app:popExitAnim=“@anim/slide_out_right”

app:destination=“@id/register”/>

<fragment

android:id=“@+id/register”

<argument

android:name=“EMAIL”

android:defaultValue=“2005@qq.com”

app:argType=“string”/>

细心的同学可能已经观察到navigation目录下的login_navigation.xml资源文件中的action标签和argument标签,这里需要解释一下:

action标签

| 属性 | 作用 |

| — | — |

| app:destination | 跳转完成到达的fragment的Id |

| app:popUpTo | 将fragment中弹出,直到某个Id的fragment |

argument标签

| 属性 | 作用 |

| — | — |

| android:name | 标签名字 |

| app:argType | 标签的类型 |

| android:defaultValue | 默认值 |

点击Android studio中的Make Project按钮,可以发现系统为我们生成了两个类:

WelcomeFragment中的JOIN US按钮点击事件:

btnRegister.setOnClickListener {

val action = WelcomeFragmentDirections

.actionWelcomeToRegister()

.setEMAIL(“TeaOf1995@Gamil.com”)

findNavController().navigate(action)

}

RegisterFragment中的接收:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {

super.onViewCreated(view, savedInstanceState)

// …

val safeArgs:RegisterFragmentArgs by navArgs()

val email = safeArgs.email

mEmailEt.setText(email)

}

以及效果:

需要提及的是,如果不用Safe Argsaction可以由Navigation.createNavigateOnClickListener(R.id.next_action, null)方式生成,感兴趣的同学可以自行编写。

三、更多


Navigation可以绑定menusdrawersbottom navigation,这里我们以bottom navigation为例,我先在navigation目录下新创建了main_navigation.xml,接着新建了MainActivity,下面则是activity_main.xml:

<LinearLayout

…>

<fragment

android:id=“@+id/my_nav_host_fragment”

android:name=“androidx.navigation.fragment.NavHostFragment”

android:layout_width=“match_parent”

app:navGraph=“@navigation/main_navigation”

app:defaultNavHost=“true”

android:layout_height=“0dp”

android:layout_weight=“1”/>

<com.google.android.material.bottomnavigation.BottomNavigationView

android:id=“@+id/navigation_view”

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:background=“@android:color/white”

app:itemIconTint=“@color/colorAccent”

app:itemTextColor=“@color/colorPrimary”

app:menu=“@menu/menu_main”/>

MainActivity中的处理也十分简单:

class MainActivity : AppCompatActivity() {

lateinit var bottomNavigationView: BottomNavigationView

override fun onCreate(savedInstanceState: Bundle?) {

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

最后

代码真的是重质不重量,质量高的代码,是当前代码界提倡的,当然写出高质量的代码肯定需要一个相当高的专业素养,这需要在日常的代码书写中逐渐去吸收掌握,谁不是每天都在学习呀,目的还不是为了一个,为实现某个功能写出高质量的代码。

所以,长征路还长,大家还是好好地做个务实的程序员吧。

最后,小编这里有一系列Android提升学习资料,有兴趣的小伙伴们可以来看下哦~

我的 Android 学习,面试文档,视频收集大整理

文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频**
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
[外链图片转存中…(img-39vBnewr-1710759801878)]

最后

代码真的是重质不重量,质量高的代码,是当前代码界提倡的,当然写出高质量的代码肯定需要一个相当高的专业素养,这需要在日常的代码书写中逐渐去吸收掌握,谁不是每天都在学习呀,目的还不是为了一个,为实现某个功能写出高质量的代码。

所以,长征路还长,大家还是好好地做个务实的程序员吧。

最后,小编这里有一系列Android提升学习资料,有兴趣的小伙伴们可以来看下哦~

我的 Android 学习,面试文档,视频收集大整理

  • 19
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值