繁体   English   中英

Android Jetpack导航:如何在OnNavigatedListener中获取目标的片段实例?

[英]Android Jetpack Navigation: How to get fragment instance of destination in OnNavigatedListener?

我在android开发中使用Jetpack导航组件(一个活动,许多片段)。

我想在OnNavigatedListener中获取目标的片段实例,如下所示。

可能吗?

class MainActivity : AppCompatActivity() {

    private lateinit var navController: NavController

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(this, R.layout.activity_main)
        navController = Navigation.findNavController(this, R.id.nav_host_fragment)
        navController.addOnNavigatedListener { controller, destination ->
            // Here
        }
    }
}

更新:场景

我想在每次导航的活动中获取片段的属性(或从方法返回的值)。

例如,

val fragment = getFragmentInstanceFromDestination()
myActionBar.visible = fragment.getActionBarVisible()

如果您使用的是1.0.0-alpha07版本,过去可以执行以下操作:

 (destination as? FragmentNavigator.Destination)?.let { destinationClass ->
            val isNewFullscreen = destinationClass.fragmentClass.superclass == FullScreenFragment::class.java
//... adjust paddings and hide action bar, etc.

这是我为一个具有两个Fragment超类的Activity应用程序所采用的方法,其中一个是FullScreenFragment(您可以看到在示例中使用的那个),它隐藏了操作栏和导航栏以及NavigationFragment(名称是令人困惑,但这一个显示导航栏和操作栏)。

问题在于,您还需要调整默认导航片段的填充,因为FullScreenFragments会占据整个屏幕,而NavigationFragment应该同时考虑操作和导航栏。

现在使用新的1.0.0-alpha08FragmentNavigatio.Destination.fragmentClass不再可用,所以我仍然在考虑如何解决这个问题。 我正在考虑使用destination.id == R.id.someFullScreenFragment ,它肯定不像我现在所拥有的那样hacky,但我必须跟踪一个id列表。

无论哪种方式,据我所知,获取Fragment本身的实例是不可能的,你可以做的最好的事情是推断目的地并让你的单个活动相应地编排视图。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM