zoukankan      html  css  js  c++  java
  • JetPack(二)-Navigation

    利用Navigation Componets实现导航

    官方文档示例图:

    实现步骤

    1. 创建导航资源(在Res下新建导航资源文件)

    1. 添加导航容器

    在某Activity的xml中添加NavHostFragment选择创建的导航资源文件

    • 支持actionbar在代码中设置(可选)
            //设置actionbar
            NavController navController = Navigation.findNavController(this,R.id.fragment);
            NavigationUI.setupActionBarWithNavController(this,navController);
    

    点击返回按钮后的操作(弹出当前视图)

        @Override
        public boolean onSupportNavigateUp() {
            NavController navController = Navigation.findNavController(this,R.id.fragment);
            return navController.navigateUp();
        }
    

    视图跳转

    1. 通过任意fragment上的View获取NavController
    2. 根据action id进行导航(action id跳转的好处可以在xml文件中设置动画)
          
    NavController navController = Navigation.findNavController(v);
    navController.navigate(R.id.action_homeFragment_to_detailFragment);
    
    • 传递参数,只需添加bundle参数即可
    NavController navController = Navigation.findNavController(v);
    Bundle bundle = new Bundle();
    bundle.putString("name","jack");   navController.navigate(R.id.action_homeFragment_to_detailFragment,bundle);
    

    在另外一个fragment中获取参数

    String name = getArguments().getString("name","默认值");
    

    添加动画

    1. 创建动画xml文件

    2. 添加合适的动画

    其中 enter代表当前actions即将进入的fragment,exit代表当前fragment

    配合ViewModel

    和在Activity中使用几乎一致,只需要将绑定视图的操作修改为如下即可

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            MyViewModelWithLiveData  mMyViewModelWithLiveData = new ViewModelProvider(getActivity()).get(MyViewModelWithLiveData.class);
    
            FragmentDetailBinding detailBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_detail,container,false );
            detailBinding.setLifecycleOwner(getActivity());
            detailBinding.setData(mMyViewModelWithLiveData);
            return detailBinding.getRoot();
     
        }
    
  • 相关阅读:
    [linux1exe元旦特供]基于wine的IE6一键安装
    http://www.tianya.cn/publicforum/content/funinfo/1/1869814.shtml
    最全的design pattern 概述
    例解 autoconf 和 automake 生成 Makefile 文件
    根据条件分组SQL
    SQL Express自动备份
    通过asp.net 短信猫发短信
    EXT.NET GridPanel(按键事件带参的另一种写法)
    Asp.net操作IIS(调试通过)
    面向接口编程详解——编程实例(T2噬菌体)
  • 原文地址:https://www.cnblogs.com/cnman/p/12960334.html
Copyright © 2011-2022 走看看