6

无法实例化以下类:( androidx.fragment.app.FragmentContainerView打开类、显示异常、清除缓存)

提示:View.isInEditMode()在您的自定义视图中使用以跳过代码或在 IDE 中显示示例数据。如果这是一个意外错误,您也可以尝试构建项目,然后手动刷新布局。

异常详情:

java.lang.UnsupportedOperationException: FragmentContainerView must be within a FragmentActivity to be instantiated from XML. 
    at androidx.fragment.app.FragmentContainerView.<init>(FragmentContainerView.java:117) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:961)  
    at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:1123)  
    at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:72)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:1097)  
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:682)  
    at android.view.LayoutInflater.inflate(LayoutInflater.java:501)

显示此消息并且布局预览未显示在基本活动或其他模板接受空活动中。

在此消息之前,显示了一条关于将片段标记替换为 的消息fragmentcontainerview。我解决了这个问题,然后显示了上述消息。我尝试过已知的解决方案,如重建、刷新布局和无效缓存/重新启动等,但他们没有成功。

4

2 回答 2

2

今天遇到了同样的问题。看看这个:https ://developer.android.com/jetpack/androidx/releases/fragment#1.3.0-alpha01 。

他们已经注意到这个问题并发布了一个更新的版本来修复这个错误。

我尝试使用这个版本的片段库,结果没有错误了,但是片段仍然没有显示在布局预览中。不确定这是我的错误还是他们仍在努力。

更新

要使用库或指定库的特定版本:

打开文件build.gradle (Module: app) ,在依赖部分添加以下行:

implementation '[library_name]:[version]'

例如,如果要使用 1.3.0-alpha01 版本的片段库,请添加以下行:

implementation 'androidx.fragment:fragment:1.3.0-alpha01'

如果您想查找每个库的名称,请查看:https ://developer.android.com/jetpack/androidx/migrate/artifact-mappings

要了解库的当前版本和最新更新:https ://developer.android.com/jetpack/androidx/versions/

于 2020-03-16T09:49:18.423 回答
2

如果您查看 的源代码FragmentContainerView,您会看到:

/**
 * Do not call this constructor directly. Doing so will result in an
 * {@link UnsupportedOperationException}.
 */
public FragmentContainerView(@NonNull Context context, @Nullable AttributeSet attrs) {
    super(context, attrs);
    throw new UnsupportedOperationException("FragmentContainerView must be within a "
            + "FragmentActivity to be instantiated from XML.");
}

不幸的是,这是布局预览调用的构造函数。在 Android Studio 团队修复此问题之前,您似乎无能为力。


这是系统“应该”使用的构造函数:

FragmentContainerView(Context context, AttributeSet attrs, FragmentManager fm) {
    // ...
}

如果您实际运行您的应用程序,则应该调用它,并且一切都应该正常工作。

于 2020-03-13T17:09:58.633 回答