• 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();
     
        }
    
  • 相关阅读:
    bzoj 1196: [HNOI2006]公路修建问题 二分+并查集
    bzoj 1607: [Usaco2008 Dec]Patting Heads 轻拍牛头 筛法
    bzoj 1050: [HAOI2006]旅行comf 并查集
    bzoj 1040: [ZJOI2008]骑士 树形dp
    bzoj 1295: [SCOI2009]最长距离
    bzoj 1070: [SCOI2007]修车 费用流
    bzoj 1057: [ZJOI2007]棋盘制作 单调栈
    bzoj 1059: [ZJOI2007]矩阵游戏 二分图匹配
    sass/scss 和 less的区别
    IONIC实现图片轮播
  • 原文地址:https://www.cnblogs.com/cnman/p/12960334.html
Copyright © 2020-2023  润新知