小编mit*_*tch的帖子

未使用导航组件添加到后台堆栈的片段

信息:

我正在以编程方式NavHostFragment为应用程序的每个功能插入一个。每个NavHostFragment都有自己的导航图。Dagger 通过使用FragmentFactory特定于每个功能来提供它们。它是具有 MVVM 架构的单一活动结构。

回购:https : //github.com/mitchtabian/DaggerMultiFeature/tree/nav-component-backstack-bug

签出分支“nav-component-backstack-bug”。


问题

当导航到图表中时,片段不会被添加到 backstack 中。添加的唯一片段是最近访问过的片段。因此堆栈大小始终保持为 1。

最初我认为这是因为我没有将 设置FragmentFactory为 ,ChildFragmentManager但这并没有改变任何东西。有关相关代码,请参阅下面的代码片段。或者签出项目并运行它。我有日志打印出当前在 backstack 中的片段ChildFragmentManagerSupportFragmentManager. 两者的大小都是 1。


Feature1NavHostFragment.kt

这是习俗之一NavHostFragmentcreate()伴随对象中的函数是我创建它们的方式。


class Feature1NavHostFragment
@Inject
constructor(
    private val feature1FragmentFactory: Feature1FragmentFactory
): NavHostFragment(){

    override fun onAttach(context: Context) {
        ((activity?.application) as BaseApplication)
            .getAppComponent()
            .feature1Component()
            .create()
            .inject(this)
        childFragmentManager.fragmentFactory = feature1FragmentFactory
        super.onAttach(context)
    }

    companion object{

        const val KEY_GRAPH_ID = "android-support-nav:fragment:graphId"

        @JvmStatic …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-navigation android-architecture-navigation android-navigation-graph

7
推荐指数
1
解决办法
1892
查看次数

Snackbar 永远不会被解雇 (Jetpack Compose SnackbarHostState)

描述

调用showSnackbarSnackbarHostState传递duration参数不会关闭 Snackbar。协程似乎无限暂停。

重现步骤:

val snackbarHostState = remember{mutableStateOf(SnackbarHostState())}

Column {
    Button(
        onClick = {
            lifecycleScope.launch {
                val time = System.currentTimeMillis()
                Log.d(TAG, "showing snackbar")
                snackbarHostState.value.showSnackbar(
                    message = "Hey look a snackbar",
                    actionLabel = "Hide",
                    duration = SnackbarDuration.Short
                )
                Log.d(TAG, "done ${System.currentTimeMillis()-time}") // <-- Never called
            }
        }
    ) {
        Text("Show snackbar")
    }
    snackbarHostState.value.currentSnackbarData?.let { snackbarData ->
        ConstraintLayout(
            modifier = Modifier.fillMaxSize()
        ) {
            val snackbar = createRef()
            Snackbar(
                modifier = Modifier.constrainAs(snackbar) {
                    bottom.linkTo(parent.bottom)
                    start.linkTo(parent.start)
                    end.linkTo(parent.end)
                }, …
Run Code Online (Sandbox Code Playgroud)

android-jetpack-compose

7
推荐指数
1
解决办法
6073
查看次数