【问题标题】:Fragment and BindingFragmentActivity is not assignable to 'android.app.Activity' after upgrading to API 28/Android X升级到 API 28/Android X 后,片段和 BindingFragmentActivity 不可分配给“android.app.Activity”
【发布时间】:2019-07-14 13:44:35
【问题描述】:

我正在升级我的旧项目以使用最新的 android api、gradle build 等...我的 Android Manifest 遇到了这个问题。

我有一些活动设置如下:

<activity
            android:name="com.company.name.ui.ColorPickerActivity"
            android:label="@string/title_activity_add_photo_library"
         android:parentActivityName="com.compant.name.ui.CaptureMenuFragment"
            android:screenOrientation="portrait"
            android:theme="@style/FullscreenTheme">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.company.name.ui.CaptureMenuFragment" />
        </activity>

我收到一条错误消息:

Fragment  is not assignable to 'android.app.Activity'

参考上面的 android:parentActivityName。应该是什么?它在以前的目标 api 设置中工作。

我查看了一些 SO 帖子,他们提到将 Fragment 更改为 FragmentActivity 但这会导致其他构建问题,例如我无法在我的意图实例中使用“getActivity()”方法。

例如:Intent intent = new Intent(getActivity(), SearchProductActivity.class);

有没有更好的解决方案?

谢谢!

编辑:

即使关于 BindingFragmentActivity,在我的清单中它说:

com.company.name.ui.ColorActivity' is not assignable to 'android.app.Activity'

在我升级到 API 28 和 Android X 之后。我的清单中的这段代码有什么问题:

<activity
            android:name="com.company.name.ui.ColorActivity"
            android:label="@string/title_activity_color"
            android:parentActivityName="com.company.name.ui.ColorsActivity"
            android:screenOrientation="portrait"
            android:theme="@style/Theme.AppCompat.NoActionBar">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.company.name.ui.ColorsActivity" />
        </activity>

【问题讨论】:

  • 如果您没有 Up button in the action bar 功能,请尝试删除 android:parentActivityName 和元数据。阅读它here
  • @nimi0112 我确实删除了 parentActivityName 和元数据,但它仍然抱怨
  • 哦,对于上面编辑中的活动,它扩展了:BindingFragmentActivity。 Android X/Api 28 的等价物是什么。我认为这就是问题所在。

标签: android android-fragments android-manifest androidx


【解决方案1】:

无需在Android Manifest 文件中声明您的片段。片段是一个reusable UI component,可以附加到任何活动。

片段从其父 Activity 获取与 Screen OrientationTheme 等相关的属性。

关于您将fragment更改为FragmentActivity的问题,您仍然可以使用FragmentActivity中的方法访问。

例如:用于获取上下文 getActivity() 可以替换为 FragmentActivityName.this

您可以阅读更多关于它的信息here

希望这会有所帮助。 谢谢。

【讨论】:

  • 那么我是否应该摆脱从上面声明片段的 parentActivity 并只留下活动?
  • @Euridice01 是的,只有活动应该在 Manifest 文件中声明。
  • @Euridice01 嘿,这个解决方案解决了你的问题吗?
  • 我的清单中仍然存在活动问题。我会更新我的帖子
猜你喜欢
  • 1970-01-01
  • 2019-08-10
  • 1970-01-01
  • 1970-01-01
  • 2020-06-24
  • 1970-01-01
  • 2020-04-16
  • 2014-01-01
相关资源
最近更新 更多