我的功能選單使用的是一個Activity,通過Navigation來控制跳轉,每個功能界面是都一個Fragment
通常的跳轉都是從選單界面的Fragment(Fm) 跳轉到相應的功能界面Fragment(Fn),如 Fm→ F1、Fm→F2、Fm→F3 等
但是有個需求是,當有訊息推送時,在點擊了訊息后,需要根據訊息內容跳轉到相應界面。如果此時處于選單界面Fm,那么好說,我可以將Action的Id作為引數,實作跳轉。但如果此時處于F1界面,訊息需要跳轉到F3界面,系統中沒有這個跳轉的Action,這種情況下該如何實作跳轉?
PS:我不可能將所有的功能界面Fragment之間都做連線,功能界面太多了
本人初學Android開發,設計思路可能有諸多不足之處,望各位大神指教
uj5u.com熱心網友回復:
可以用viewpager嵌套多個fragment 通過viewPager.setCurrentItem(int) 來控制要顯示那個fragmentuj5u.com熱心網友回復:
我覺得這種場景下,你是不是應該考慮用activity呢,或者把你的fragment單獨包裹在一個只用fragment填充的activity內uj5u.com熱心網友回復:
NavController navController = Navigation.findNavController(v);
navController.navigate(R.id.fragment_target));
uj5u.com熱心網友回復:
我也是一樣的需求,就是每個fragment都連接到目標fragment,然后在activity判斷當前時哪個fragment,確實繁瑣。我在想是否這樣這樣:一般fragment都繼承一個basefragment,跳轉時在basefragment判斷當前是否為homefragment,不是就呼叫自動回傳Navigation.findNavController(it).popBackStack(),當為homefragment則跳轉。uj5u.com熱心網友回復:
接著實作是這樣: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)
}
}
}
}
uj5u.com熱心網友回復:
我覺得可以先判斷當前頁是不是home,不是就popBackStack(home,false),然后通過home->target fragment 的action去跳轉。uj5u.com熱心網友回復:
Navigation 也好多坑,我用Navigation+BottomNavigationView 做底部導航,在當前頁點擊底部的當前頁,都會重新跳轉執行生命周期。點進去看可能原始碼,居然在BottomNavigationView 的setOnNavigationItemSelectedListener里面直接根據menuItem 的id 做跳轉,navController.navigate(item.getItemId(), null, options); 隨便加個判斷也行。
Navigation 上次看的時候有個singinTop的效果,題主知道嗎
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/98580.html
標籤:Android
上一篇:有大神知道Android 約束布局constraint在阿語下adapter的第一條不會反轉的原因不
下一篇:個人開發者創建新應用
