我的功能菜单使用的是一个Activity,通过Navigation来控制跳转,每个功能界面是都一个Fragment通常的跳转都是从菜单界面的Fragment(Fm) 跳转到相应的功能界面Fragment(Fn),如 Fm→ F1、Fm→F2、Fm→F3 等但是有个需求是,当有消息推送时,在点击了消息后,需要根据消息内容跳转到相应界面。如果此时处于菜单界面Fm,那么好说,我可以将Action的Id作为参数,实现跳转。但如果此时处于F1界面,消息需要跳转到F3界面,系统中没有这个跳转的Action,这种情况下该如何实现跳转?PS:我不可能将所有的功能界面Fragment之间都做连线,功能界面太多了本人初学Android开发,设计思路可能有诸多不足之处,望各位大神指教

解决方案 »

  1.   

    可以用viewpager嵌套多个fragment  通过viewPager.setCurrentItem(int) 来控制要显示那个fragment
      

  2.   

    我觉得这种场景下,你是不是应该考虑用activity呢,或者把你的fragment单独包裹在一个只用fragment填充的activity内
      

  3.   


    NavController navController = Navigation.findNavController(v);
    navController.navigate(R.id.fragment_target));
      

  4.   

    我也是一样的需求,就是每个fragment都连接到目标fragment,然后在activity判断当前时哪个fragment,确实繁琐。我在想是否这样这样:一般fragment都继承一个basefragment,跳转时在basefragment判断当前是否为homefragment,不是就调用自动返回Navigation.findNavController(it).popBackStack(),当为homefragment则跳转。
      

  5.   

    接着实现是这样:
    activity:
    private fun gotoGongDan(){
            SpUtil.writeBoolean(this, KEY_GOTO_TARGET, true)
            when(val fragment = getCurrentFragment()){
                is BaseFragment -> fragment.gotoTargetFragment()
            }
        }basefragment:
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            gotoTargetFragment()
        }fun gotoTargetFragment(){
            if (SpUtil.readBoolean(MyApp.instance, KEY_GOTO_TARGET, false)){
                view?.let{
                    if (layoutId != R.layout.fragment_home){
                        Navigation.findNavController(it).popBackStack()
                    }else{
                        Navigation.findNavController(it).navigate(R.id.action_homeFragment_to_targetFragment)
                        SpUtil.writeBoolean(MyApp.instance, KEY_GOTO_TARGET, false)
                    }
                }
            }
        }
      

  6.   

    我觉得可以先判断当前页是不是home,不是就popBackStack(home,false),然后通过home->target fragment 的action去跳转。
      

  7.   

    Navigation 也好多坑,我用Navigation+BottomNavigationView 做底部导航,在当前页点击底部的当前页,都会重新跳转执行生命周期。
    点进去看可能源码,居然在BottomNavigationView 的setOnNavigationItemSelectedListener里面直接根据menuItem 的id 做跳转,navController.navigate(item.getItemId(), null, options);  随便加个判断也行。Navigation 上次看的时候有个singinTop的效果,题主知道吗