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();
     
        }
    
  • 相关阅读:
    $动态规划系列(1)——金矿模型的理解
    $Java HttpClient库的使用
    $Java-json系列(二):用JSONObject解析和处理json数据
    $百度应用引擎BAE的使用与应用部署
    利用ajax短轮询+php与服务器交互制作简易即时聊天网站
    MYSQL explain详解
    Redis 5种数据结构使用及注意事项
    Redis 存储机制
    memcache
    mysql分表和表分区详解
  • 原文地址:https://www.cnblogs.com/cnman/p/12960334.html
Copyright © 2011-2022 走看看