Android Jetpack :Navigation 学习笔记

    Android在2019今年的开发者大会上提出了一个App只有一个activity的建议,因此作为未来android开发规范组件库的Jetpack也自然要遵循这个建议。所以Navigation正常来说是用于fragment的导航而不是activity的导航。同时,Jetpack提倡使用图形化界面对前端进行编程,所以使用Navigation时,用图形化界面要方便得多。(学了Jetpack的Navigation之后,你会发现…真香)

实现Navigation分三步:

1 实现导航图(navigation.xml)

    1.1 在res文件夹右键创建Android resource 文件,选择文件类型为Navigation,命名为nav(根据需要取名),之后会生成nav.xml文件,这就是导航图。

    1.2 创建fragment.java文件(as会自动生成fragment.java相关的xml文件,你可以手动修改fragment的xml文件的布局,我一般是修改为constraintlayout:依赖布局,依赖布局可以说是专门为可视化界面设计而出现的),之后切换到nav.xml的设计视图,点击设计视图左上角加号,将fragment添加到导航图(nav.xml)中,并根据你需要导航的需求将他们连线
在这里插入图片描述
其中带箭头的线就是你的页面跳转逻辑,每一条线称为一个action,Android studio会自动帮你创建相应的action的xml标签,使用的时候直接取其id就行,自动创建的id也很人性化,比如我是将homefragment跳转到detailfragment,那么取action的id就是R.id.action_homeFragment_to_detailFragment。到这里导航图就完成了(导航图会根据你的连线自动选择一个fragment做为开始的fragment,当然你也可以自己设置)。

2 NavHost

    在activity_main.xml中添加NavHostFragment,相当于把我们关联后的fragment添加到activity_main.xml中,这时候我们的activity_main.xml中就会显示导航图中的内容。
在这里插入图片描述

3 NavController:

在按钮事件中绑定NavController(顾名思义:导航控制者),指定你点击这个按钮点击后我要跳转的页面即可。

3.1 不带参数跳转:

        getView().findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //实例化NavController对象:controller
                NavController controller = Navigation.findNavController(v);

                //controller用navigate()方法执行跳转,跳转方式是R.id.action_homeFragment_to_detailFragment
                controller.navigate(R.id.action_homeFragment_to_detailFragment);
                
            }
        });

3.2 带参数跳转:

        getView().findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //实例化NavController对象:controller
                NavController controller = Navigation.findNavController(v);
                
				//获取EditText的输入作为参数
                EditText editText = getView().findViewById(R.id.editText);
                String s = editText.getText().toString();
                
                //将参数绑定到bundle对象里,键是“text”
                Bundle bundle = new Bundle();
                bundle.putString("text", s);

                //跳转过程中添加第二个参数:bundle
                controller.navigate(R.id.action_homeFragment_to_detailFragment,bundle);

            }
        });

3.3 在跳转到的页面取参数:

        String text = getArguments().getString("text");   //取键位“text”中的值
        TextView textView = getView().findViewById(R.id.textView2);
        textView.setText(text);

到这里navigation基本完成了,不过实现时navigation时可以把Jetpack的其他组件都一起实现,包括Viewmodel、Databing、Lifecycles、LiveData。你会发现Android的Jetpack架构是真的香(o(╥﹏╥)o不过在实现时我花了差不多10个小时,才把坑踩完)收益是真的大。

最后po一下超好的Android jetpack教程:
https://www.bilibili.com/video/BV1vx411Z71z
Android Jetpack的开发者文档:
https://developer.android.google.cn/jetpack

原创文章 31 获赞 30 访问量 7097

猜你喜欢

转载自blog.csdn.net/qq_41912398/article/details/105184975