【问题标题】:getFragmentManager() not working in KotlingetFragmentManager() 在 Kotlin 中不起作用
【发布时间】:2017-06-22 18:31:36
【问题描述】:

我正在尝试在我的项目中本地启动一个包含在库模块中的 DialogFragment。我从中调用它的类正在使用 Kotlin,我在函数 getFragmentManager() 上收到以下错误:以下函数都不能使用提供的参数调用

  import com.github.adamshurwitz.materialsearchtoolbar.SearchDialogFragment
    ...

    private var searchDialogFragment: SearchDialogFragment? = null
    ...

    searchDialogFragment = SearchDialogFragment()
    searchDialogFragment.show(supportFragmentManager, null)

我有另一个项目,我在 Java 中调用它,它可以正常使用:getSupportFragmentManager()

我尝试过的解决方案:

searchDialogFragment.show(getFragmentManager(), null)
searchDialogFragment.show(supportFragmentManager, null)
searchDialogFragment.show(supportFragmentManager as FragmentManager, null)
searchDialogFragment.show(supportFragmentManager.beginTransaction(), null)
searchDialogFragment.show(supportFragmentManager(), null)

【问题讨论】:

  • 你的show方法签名是什么?
  • 您确定不需要 supportFragmentManager 吗?
  • @VladMatvienko:我正在使用 android.support.v4.app.DialogFragment 方法。 public void show(FragmentManager manager, String tag) { mDismissed = false; mShownByMe = 真; FragmentTransaction ft = manager.beginTransaction(); ft.add(这个,标签); ft.commit(); }
  • @AdamForbis 我也试过这种方法。
  • 如果看show方法的源码是不是标记为@Nullable的tag参数?如果你给它一个实际的标签,它仍然做同样的事情吗?

标签: android kotlin


【解决方案1】:

由于您的searchDialogFragment 变量在声明中用问号标记为可为空,因此您需要使用安全调用运算符?.。它仅在searchDialogFragment 不为空时执行:

searchDialogFragment?.show(supportFragmentManager, null)

或者您可以使用以下内容将您的变量声明为非空,但仍然可以稍后在您的代码中对其进行初始化:

private lateinit var searchDialogFragment: SearchDialogFragment

【讨论】:

【解决方案2】:

只需替换为以下代码:

searchDialogFragment.show(fragmentManager!!.beginTransaction(), null)

确定您是否已经导入:import androidx.fragment.app.Fragment

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多