android studio自带的NavigationUI加载的Fragment,获取Fragment对象,并在Fragment中调用onActivityResult()方法,

1.

BottomNavigationView navView = findViewById(R.id.nav_view);

NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);

//NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);

navView.setItemIconTintList(null);   // 设置 BottomNavigationView 图片没有颜色覆盖
NavigationUI.setupWithNavController(navView, navController);

2.获取Fragment对象

//clazz传入fragment类:如:HomeFragment.class
public Fragment getFragment(Class<?> clazz) {
        List<Fragment> fragments = getSupportFragmentManager().getFragments();
        if (fragments.size() > 0) {
            NavHostFragment navHostFragment = (NavHostFragment) fragments.get(0);
            List<Fragment> childfragments = navHostFragment.getChildFragmentManager().getFragments();
            if(childfragments.size() > 0){
                for (int j = 0; j < childfragments.size(); j++) {
                    Fragment fragment = childfragments.get(j);
                    if(fragment.getClass().isAssignableFrom(clazz)){
                        Log.i(TAG, "HomeFragment: " + fragment);
                        return fragment;
                    }
                }
            }
        }
        return null;
    }

3.在宿主Activity中的onActivityResult()方法中

 @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        getFragment(HomeFragment.class).onActivityResult(requestCode, resultCode, data);
    }

这样就可以将在fragment中使用startActivityForResult()返回的值从Activity的onActivityResult()中传递会fragment

4.fragment切换保存数据,即fragment不重建

private Fragment startfragment;
@Override
protected void onResume() {
    super.onResume();
    homeFragment= (HomeFragment) getFragment(HomeFragment.class);
    notificationsFragment= (NotificationsFragment) getFragment(NotificationsFragment.class);
    dashboardFragment= (DashboardFragment) getFragment(DashboardFragment.class);
//初始fragment
    startfragment=homeFragment;
    requestPermission();
}
 navView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                switch (item.getItemId()){
                    case R.id.navigation_home:
                       // navController.navigate(R.id.navigation_home);
                        if(homeFragment==null||!homeFragment.isAdded()){
                            homeFragment=new HomeFragment();
                            getSupportFragmentManager().getPrimaryNavigationFragment()
                                    .getChildFragmentManager().beginTransaction()
                                    .hide(startfragment)
                                    .add(R.id.nav_host_fragment,homeFragment)
                                    .commit();
                        }else {
                            getSupportFragmentManager().getPrimaryNavigationFragment()
                                    .getChildFragmentManager()
                                    .beginTransaction()
                                    .hide(startfragment)
                                    .show(homeFragment).commit();
                        }
                        startfragment=homeFragment;
                        break;
                    case R.id.navigation_dashboard:
                        //navController.navigate(R.id.navigation_dashboard);
                        if(dashboardFragment==null||!dashboardFragment.isAdded()){
                            dashboardFragment=new DashboardFragment();
                            getSupportFragmentManager().getPrimaryNavigationFragment()
                                    .getChildFragmentManager().beginTransaction()
                                    .hide(startfragment)
                                    .add(R.id.nav_host_fragment,dashboardFragment)
                                    .commit();
                        }else {
                            getSupportFragmentManager().getPrimaryNavigationFragment()
                                    .getChildFragmentManager()
                                    .beginTransaction()
                                    .hide(startfragment)
                                    .show(dashboardFragment).commit();
                        }
                        startfragment=dashboardFragment;
                        break;
                    case R.id.navigation_notifications:
                       // navController.navigate(R.id.navigation_notifications);
                        if(notificationsFragment==null||!notificationsFragment.isAdded()){
                            notificationsFragment=new NotificationsFragment();
                            getSupportFragmentManager().getPrimaryNavigationFragment()
                                    .getChildFragmentManager().beginTransaction()
                                    .hide(startfragment)
                                    .add(R.id.nav_host_fragment,notificationsFragment)
                                    .commit();
                        }else {
                            getSupportFragmentManager().getPrimaryNavigationFragment()
                                    .getChildFragmentManager()
                                    .beginTransaction()
                                    .hide(startfragment)
                                    .show(notificationsFragment).commit();
                        }
                        startfragment=notificationsFragment;
                        break;
                }
                return false;
            }
        });

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值