【问题标题】:Activity's incapability with androidxActivity 无法使用 androidx
【发布时间】:2020-09-23 12:05:54
【问题描述】:

我遇到了一个与 Activity 的 getFragmentManager() 与 androidx.FragmentManager 不一致的问题。

所以我有以下方法:

public void myMethod(Activity activity) {
    /**
     * do some staff here
     */
    
    //now we should open a DialogFragment
    new MyCustomDialogFragment().show((activity).getFragmentManager(), MyCustomDialogFragment.TAG);
    
}

在这里我收到错误"Can not resolve method show(android.app.FragmentManager, java.lang.String)

所有这些都是因为我的DialogFragment 来自androidx.fragment.app 包,而ActivitygetFragmentManager()android.app 包返回FragmentManager

我看到 2 个选项可以解决这个问题。

  1. 更改DialogFragment 的依赖关系,并使用android.app 中的依赖关系
  2. 更改myMethod() 签名以接收AppCompatActivity(来自androidx)而不是Activity 并调用getSupportedFragmentManager()

第一个解决方案不好,因为我想在任何可能的地方继续使用 androidx 类。其次,尽管 AppCompatAcivitity 是一种最佳实践,但它也有缺点。

问题是:有没有办法继续使用 androidx 依赖并在 myMethod() 中包含 Activity 类型参数?

【问题讨论】:

    标签: android android-activity androidx appcompatactivity android-fragment-manager


    【解决方案1】:

    您应该使用FragmentActivity(来自androidx)而不是Activity 作为myMethod() 中的参数类型,并调用getSupportFragmentManager() 以获取FragmentManager。这应该可以解决您的问题。

    【讨论】:

    • 使用 FragmentActivity 似乎比 AppCompatActivity 更好,因为它是超类,但又不够好,因为我不想用活动子类限制我的方法用户。逻辑是这样的,我有 Activity 类,它有 getFragmentManager() 方法,我想将它与 androidx 一起使用。无能问题在这里有点不可接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2019-06-27
    • 2019-07-08
    • 1970-01-01
    • 2020-03-29
    • 2019-11-29
    相关资源
    最近更新 更多