未显示Android Studio预览

时间:2020-03-13 17:00:09

标签: android android-studio android-layout android-fragments android-studio-3.6.1

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

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

异常详细信息:

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替换片段标签的消息。我解决了这个问题,然后显示了以上消息。我尝试了一些已知的解决方案,例如重建,刷新布局以及使缓存/重启无效等,但是它们并没有解决问题。

2 个答案:

答案 0 :(得分:2)

今天遇到相同的问题。检查一下:https://developer.android.com/jetpack/androidx/releases/fragment#1.3.0-alpha01

他们已经注意到此问题,并发布了可解决此错误的更新版本。

我尝试使用此版本的Fragment库,结果再也没有错误,但是片段仍未显示在布局预览中。不知道这是我的错误还是他们还在努力。

更新

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

打开文件 build.gradle(模块:应用),在依赖项部分中添加以下行:

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/

答案 1 :(得分:1)

如果您查看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) {
    // ...
}

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