简介

Navigation组件简化了Android应用程序中页面之间跳转的实现。在 AndroidStudio3.2中可以使用,默认情况下,Navigation组件支持fragments和Activities,也可以自定义支持类型

新建Navigation

首先添加依赖:

 

implementation 'android.arch.navigation:navigation-fragment:1.0.0-alpha01'

然后:

    1. 新建一个项目,右键单击 res 文件夹,选择 New > Android resource file
    1. 输入文件名,例如:"nav_graph"
    1. 文件类型选择 Navigation
    1. 点击 OK
  • 5.打开此文件

效果如下图:

android使用Navigation实现Fragment之间的跳转之一:基础使用_第1张图片

图一

认识编辑器

Navigation编辑器有三个部分:

android使用Navigation实现Fragment之间的跳转之一:基础使用_第2张图片

图二

  • 1.Destinations list -- 列出在Graph Editor中的所有Destinations。

    1. Graph Editor -- Destinations的可视化。
  • 3.属性编辑器 - 包含Destinations和action相关的属性。

创建Destinations

在Graph Editor点击 +号 > create blank Destinations创建新的Destinations,默认为 fragment,此处我创建了两个Destinations,如图:

android使用Navigation实现Fragment之间的跳转之一:基础使用_第3张图片

图三

此时Text视图中:

 

<?xml version="1.0" encoding="utf-8"?>        

连接Destination

点击一个Destination,其右侧会出现一个圆圈

android使用Navigation实现Fragment之间的跳转之一:基础使用_第4张图片

图四

单击圆圈并按住,连接到其他的Destination:

android使用Navigation实现Fragment之间的跳转之一:基础使用_第5张图片

图五

此时 Text视图中:

 

<?xml version="1.0" encoding="utf-8"?>                    

编辑MainActivity(此处是MainActivity)

在MainActivity的 xml 中添加:

 

app:defaultNavHost="true" 此属性可确保您NavHostFragment拦截系统返回按钮也可以重写AppCompatActivity.onSupportNavigateUp()方法:

 

@Overridepublic boolean onSupportNavigateUp() {    return Navigation.findNavController(this, R.id.nav_host_fragment).navigateUp();}

此时 MainActivity 如图:

android使用Navigation实现Fragment之间的跳转之一:基础使用_第6张图片

图六

开始使用

跳转到Destinations使用的是NavController这个类,可以由以下方法返回

  • NavHostFragment.findNavController(Fragment)

  • Navigation.findNavController(Activity, @IdRes int viewId)

  • Navigation.findNavController(View)

我们在 First Fragment 中添加几个按钮并设置点击事件:

android使用Navigation实现Fragment之间的跳转之一:基础使用_第7张图片

图七

 

<?xml version="1.0" encoding="utf-8"?>            

再点击事件中写:

 

    @Override    public void onClick(View v) {        switch (v.getId()) {            default:                break;            case R.id.button_1:                Navigation.findNavController(v).navigate(R.id.action_firstFragment_to_secondFragment);                break;        }      }

或者使用:

 

mButton2.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_firstFragment_to_secondFragment, null));Navigation.createNavigateOnClickListener() 返回一个View.OnClickListener对象

点击运行:

运行

Navigation与 Menu 结合使用

首先依赖一下:

 

implementation 'android.arch.navigation:navigation-ui:1.0.0-alpha01'

再次新建一个Destinations,

 

新建 menu 文件menu_nav_drawer:

 

<?xml version="1.0" encoding="utf-8"?>            

然后把MainActivity对应的 xml 改一下:

 

<?xml version="1.0" encoding="utf-8"?>        

之后MainActivity中:

 

        NavigationView mNavView = (NavigationView) findViewById(R.id.nav_view);        NavController navController = Navigation.findNavController(this, R.id.my_nav_host_fragment);        NavigationUI.setupWithNavController(mNavView, navController);

运行一下:

运行



 

更多相关文章

  1. android 裁剪图片完 程序会崩溃问题
  2. android :图片下载到本地后不让其在相册中显示
  3. android创建googlemap基础教程和画导航线路图
  4. andorid 将布局文件(layout)转换为图片(Bitmap)简单使用详解
  5. 【Android基础学习】Android使用fitsSystemWindows属性实现–状
  6. Android画各种圆,饼图,环图,圆形图片
  7. android TextView 结合SpannableString对部分内容设置颜色、字体
  8. android 图片压缩的几种方法

随机推荐

  1. Android 强制横屏
  2. 最近学习android,关于这个分辨率,有点烦
  3. Android(安卓)studio真机模拟调试
  4. 【Arcgis for android】Error inflating
  5. Android以TelephonyManager取得話機狀態
  6. android输入法控制显示
  7. 日拱一卒(五十三)
  8. android(linux) 背光流程
  9. Android 浅析 ButterKnife (一) 使用
  10. android 如何使用jni