升级到API 28 / Android X后,Fragment和BindingFragmentActivity无法分配给“ android.app.Activity”

时间:2019-07-14 13:44:35

标签: android android-fragments android-manifest androidx

我正在升级旧项目,以使用最新的android api,gradle构建等...并且我在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>

1 个答案:

答案 0 :(得分:1)

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

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

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

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

您可以详细了解here

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