「Android高级开发」10年老程序员经验谈:navigation入门详解

4.节点创建后可以看到三个节点(看下面图片,这些节点都是我已经导入fragment了.不要急后面会讲解如何导入).这里有一个重点! 你可以点击这些页面(会有一个蓝点),点击蓝点按住向右分配它需要跳转的另外一个页面.(它会自动生成一些我们跳转的代码)

6.然后点击左下角的Text模式,在Text模式下,可以看到如下代码,在上面的图片中你可以很清楚的看到创建了3个节点,并且是一个跳转一个的.从第一个fragment跳转到第二个fragment,再从第二个fragment跳转到第三个fragment

下面我们来重点讲解下下面的这些代码的关键点了:

在<navigation里的属性:

1.android:id=“@+id/demo_nav” 这个属性是你这个xml文件navigation的id,很重要,我们需要在activity的xml布局里引用,记得写上不要忘记

2.app:startDestination=“@id/one” 这个属性是你首次加载的第一个页面,很重要,一般就是第一个fragment

在<fragment 里的属性:

其实就是一个节点你也可以理解成一个fragment

1.android:id=“@+id/one” 每一个fragment节点都需要有自己的id,很重要. 我们需要在后面的节点上使用这些id指定跳转目标

2.android:name=“demo.yt.com.demo.fragment.BlankFragment” 这个属性是你这个节点所对应的fragment(需要你导入指定的fragment文件路径),这个很重要

3.android:label=“BlankFragment” 一个标签名称,用于记录这个节点的标签信息(大概可能是在代码里的Intent里获取来知晓此次是哪个fragment节点在跳转,没深究了)

4.tools:layout=“@layout/fragment_blank” 这个属性不是重要的,设置它后你可以在切换到Design模式后看到,视图页面的fragment的预览图(就在上面的图片里,可以直接看到fragment效果)

在<action 里的属性:

action 负责编写跳转动作

1. android:id=“@+id/action_one_to_two” 这个很重要,它是这个跳转动作的id, 这个id我们将在后面的代码中调用,用于执行fragment的跳转

2. app:destination=“@id/two” 跳转的目标fragment,这个很重要

<fragment android:id=“@+id/one”

android:name=“demo.yt.com.demo.fragment.BlankFragment”

android:label=“BlankFragment”

tools:layout=“@layout/fragment_blank”>

<action

android:id=“@+id/action_one_to_two”

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

<fragment android:id=“@+id/two”

android:name=“demo.yt.com.demo.fragment.Blank2Fragment”

android:label=“BlankFragment”

tools:layout=“@layout/fragment_blank2”>

<action

android:id=“@+id/action_two_to_three”

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

<fragment android:id=“@+id/three”

android:name=“demo.yt.com.demo.fragment.Blank3Fragment”

android:label=“BlankFragment”

tools:layout=“@layout/fragment_blank3”/>

让navigation与Activity关联起来

现在我们已经创建了navigation,但是使用它还需要一个根Activity,它毕竟还是需要依托Activity的.

1.创建了一个叫DemoActivity的Activity.这个没啥,下面来看这个Activity的布局xml怎么配(如下xml代码)

我们就关注fragment的一些属性

1.android:name=“androidx.navigation.fragment.NavHostFragment” 这个非常重要,这是你告知fragment需要使用navigation模式的关键属性,另外它是固定死的.你必须写.

2. app:defaultNavHost=“true” 这是你实现物理按键(比如返回键),是按一下退出一个fragment 还是直接退出这个Activity的关键属性

3.app:navGraph=“@navigation/demo_nav” 很重要,这就是我们前面创建的navigation的xml文件

<fragment

android:id=“@+id/demo_fragment”

android:layout_width=“0dp”

android:layout_height=“0dp”

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

app:defaultNavHost=“true”

app:navGraph=“@navigation/demo_nav”

app:layout_constraintTop_toTopOf=“parent”

app:layout_constraintBottom_toBottomOf=“parent”

app:layout_constraintLeft_toLeftOf=“parent”

app:layout_constraintRight_toRightOf=“parent”/>

实现fragment跳转与返回

进入到DemoActivity后,首先会自动加载到第一个fragment. 然后我们看看如何跳转到其他fragment中

1.从第一个碎片跳转到第二个碎片,关键代码 Navigation.findNavController(getView()).navigate(R.id.action_one_to_two);

private Button mBtnInputFragment2;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

}

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

final View view = inflater.inflate(R.layout.fragment_blank, container, false);;

mBtnInputFragment2 = view.findViewById(R.id.btn_input_fragment2);

mBtnInputFragment2.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Navigation.findNavController(getView()).navigate(R.id.action_one_to_two);//这个id就是navigation里的action的id

}

});

return view;

}

@Override

public void onDestroy() {

super.onDestroy();

}

@Override

public void onDetach() {

super.onDetach();

}

2.从第二个碎片返回到第一个碎片,关键代码 Navigation.findNavController(getView()).popBackStack();

private Button mBtnInputFragment3, mBtnBack;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

}

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.fragment_blank2, container, false);

mBtnInputFragment3 = view.findViewById(R.id.btn_input_fragment3);

mBtnBack = view.findViewById(R.id.back);

mBtnInputFragment3.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Navigation.findNavController(getView()).navigate(R.id.action_two_to_three); //进入第三个碎片

}

});

mBtnBack.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Navigation.findNavController(getView()).popBackStack(); //返回上一个碎片

}

});

return view;

}

学习路线

==================================================================

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

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

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

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后

目前已经更新的部分资料:



《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

!!(备注:Android)**

最后

目前已经更新的部分资料:

[外链图片转存中…(img-NTkFmnZW-1713428266449)]
[外链图片转存中…(img-MWW6dQ3t-1713428266450)]
[外链图片转存中…(img-Pq2WZ1Wt-1713428266451)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值