膨胀类片段时出错

tsy*_*ync 154 android android-layout android-fragments

我得到了错误

Unable to start activity ComponentInfo{de.androidbuch.activiti/de.androidbuch.activiti.task.Activity}: android.view.InflateException: Binary XML file line #11: Error inflating class fragment
Run Code Online (Sandbox Code Playgroud)

当我通过肖像和横向模式切换时.我正在使用片段.我的xml是:

 <LinearLayout android:id="@+id/mainLayout"
               android:orientation="horizontal"
               android:layout_width="fill_parent"
               android:layout_height="wrap_content" >

    <ListView android:id="@+id/android:list"
              android:layout_height="wrap_content"
              android:layout_width="fill_parent"/> 

    <fragment android:id="@+id/fragmentDetails"
              android:layout_height="fill_parent"
              android:layout_width="fill_parent"
              class="de.androidbuch.activiti.task.TaskDetailsFragment"/> 
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

如果我通过横向和纵向模式切换一切正常.但是当我点击我的片段(我可以看到我的片段)然后切换到另一种模式时,我得到了错误.知道怎么解决吗?在这里找到了一些答案,但这些都没有帮助我...

06-21 14:55:05.600: ERROR/AndroidRuntime(7636): FATAL EXCEPTION: main
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): java.lang.RuntimeException: Unable to start activity         
ComponentInfo{de.androidbuch.activiti/de.androidbuch.activiti.task.Activity}:   android.view.InflateException: Binary XML file line #11: Error inflating class fragment
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1736)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1752)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3097)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.ActivityThread.access$1600(ActivityThread.java:123)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:997)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.os.Looper.loop(Looper.java:126)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.ActivityThread.main(ActivityThread.java:3998)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at java.lang.reflect.Method.invokeNative(Native Method)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at java.lang.reflect.Method.invoke(Method.java:491)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at dalvik.system.NativeStart.main(Native Method)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class fragment
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:688)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:724)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:727)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.view.LayoutInflater.inflate(LayoutInflater.java:479)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.view.LayoutInflater.inflate(LayoutInflater.java:391)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.view.LayoutInflater.inflate(LayoutInflater.java:347)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:227)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.Activity.setContentView(Activity.java:1771)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at de.androidbuch.activiti.task.TaskActivity.onCreate(TaskActivity.java:83)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1700)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     ... 12 more
Run Code Online (Sandbox Code Playgroud)

Dan*_*son 128

正如hdemirchian所说,请务必使用:

import android.support.v4.app.Fragment;
Run Code Online (Sandbox Code Playgroud)

并确保使用片段的Activity扩展FragmentActivity而不是常规Activity,

import android.support.v4.app.FragmentActivity;
Run Code Online (Sandbox Code Playgroud)

拿到FragmentActivity类.

  • 这已经投了很多,但对我来说,它在恢复应用程序时崩溃了,我已经在使用v4 Fragment和v4 FrsgmentActivity - 更精确的AppCompatActivity. (11认同)
  • 谢谢,旁注是AppCompatActivity是FragmentActivity的后代. (5认同)
  • 这不是解决方案.import android.support.v4.app.Fragment; 什么都不改变.实际上它甚至未使用且不需要导入. (4认同)

Gri*_* A. 92

android.view.InflateException: Binary XML file line: #... Error inflating class fragment如果getActivity()onActivityCreated()调用之前在片段内部进行操作,则可能会发生异常.在这种情况下,您收到错误的活动参考,不能依赖它.

例如,下一个模式是错误的:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState) 
{
    final View view = inflater.inflate(R.layout..., container, false);

    Button button = getActivity().findViewById(R.id...);
    button.setOnClickListener(...); - another problem: button is null

    return view;
}
Run Code Online (Sandbox Code Playgroud)

正确的模式#1

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState) 
{
    final View view = inflater.inflate(R.layout..., container, false);

    Button button = view.findViewById(R.id...);
    button.setOnClickListener(...);

    return view;
}
Run Code Online (Sandbox Code Playgroud)

正确的模式#2

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    Button button = getActivity().findViewById(R.id...);
    button.setOnClickListener(...);
}
Run Code Online (Sandbox Code Playgroud)


jam*_*mes 53

确保你的Activity延伸FragmentActivity.

  • 如果我的活动已经扩展了ActionBarActivity怎么办? (29认同)
  • [注意:FragmentActivity是支持库中提供的特殊活动,用于处理API级别11之前的系统版本上的片段。如果您支持的最低系统版本是API级别11或更高版本,则可以使用常规的Activity。](https ://developer.android.com/training/basics/fragments/creating.html) (2认同)

Mat*_*lis 34

我有同样的错误.我整天都在挖,不知道但是我想我在这个问题上试过了25个解决方案.没有工作,直到凌晨2点我发现我在应用程序清单xml中缺少这一行:

<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
Run Code Online (Sandbox Code Playgroud)

那条线在<application>标签内.我真的希望这对某人有帮助.GL.

  • 我的英雄.喜欢你的人太棒了! (3认同)
  • 请解释一下发生了什么.这条线的好处是什么? (3认同)
  • 谢谢,救我的一天.在android上使用谷歌地图的每个样本都有不同的工作方式,我想知道是否有标准. (2认同)

小智 22

我有同样的问题.我的解决方案是FragmentActivity中的super.onCreate和setContentView的顺序

以下订单工作正常:

    super.onCreate(savedInstanceState);
    setContentView(R.layout.fc_activity_list_profiles);
Run Code Online (Sandbox Code Playgroud)

  • @StéphaneBruckert并不总是必须首先调用`super.method()`.这取决于超级类的方法.在"FragmentActivity"的情况下,它做了一些初始化,使`setContentView`正常工作.然而在另一个方法(比如`onKeyUp`)中你可能想要有条件地对动作做一些工作,但是回退到`super.onKeyUp`,在这种情况下你很可能想在最后调用`super.onKeyUp`.功能. (11认同)
  • 为什么要修复它? (3认同)

Dhi*_*pta 17

片段不能嵌套在XML中

这很难理解 - 如果你<fragment>在一个(可能)动态加载的片段中嵌入一​​个基于XML布局的标签FragmentManager,那么你就会开始得到奇怪的错误,试图给你的片段xml充气.

事实证明,这是支持的-如果你通过纯粹的做到这一点会正常工作FragmentManager的方法.

我遇到了这个问题,因为我正在尝试<DrawerLayout>从xml中加载一个片段,onCreateView()当我弹出后面的堆栈时,这导致了方法崩溃.

  • 请参阅本节末尾的注释以进行确认:https://developer.android.com/about/versions/android-4.2.html#NestedFragments (2认同)

小智 16

我遇到了与你面临的问题相同的问题.顶部的提示都没有帮助我.后来,我发现我所要做的就是修复我的导入:

import android.app.Fragment;
Run Code Online (Sandbox Code Playgroud)

至:

import android.support.v4.app.Fragment;
Run Code Online (Sandbox Code Playgroud)


Lei*_*Lei 12

确保片段的onCreateView方法中没有引发异常.如果在此方法中引发任何异常,则logcat将不会显示异常的确切详细信息,而是始终显示消息:

Caused by: java.lang.ClassNotFoundException: Didn't find class "android.view.fragment" 
on path: DexPathList[[zip file "/data/app/com.package/base.apk"],
nativeLibraryDirectories=[/data/app/com.package/lib/arm64, /vendor/lib64, /system/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
Run Code Online (Sandbox Code Playgroud)


Blu*_*ell 11

你有没有尝试过:

 <fragment
            android:name="de.androidbuch.activiti.task.TaskDetailsFragment"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
Run Code Online (Sandbox Code Playgroud)


Sur*_* TR 6

如果您的TaskDetailsFragment延期android.app.Fragment,请改变 onCreateView().

返回要在片段中显示的视图,或使用LayoutInflater将布局转换为视图并将其返回.

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View mainview = inflater.inflate(R.layout.main, null);
    return mainview;
}
Run Code Online (Sandbox Code Playgroud)

希望这有效.:)


xMy*_*icx 6

我出于不同的原因收到了这个错误.

重现步骤:

〜>我的问题是我创建了一个全新的空白应用程序.

〜>然后我从File~> New File Menu生成一个自定义片段.

〜>继续通过添加布局和按钮等来自定义片段.

〜>在创建应用程序时为我生成的自动生成的activity_my.xml中引用了新的自定义片段.这样做允许XML为我生成对象.

通过File~> New File Menu生成自定义片段时,它是自动生成接口函数存根并将其放在片段类文件的底部.

这意味着您的MyActivity类必须实现此接口.如果没有,则仅在引用xml中的片段时才会发生上述错误.通过完全删除XML中Fragment的引用,并通过MyActivity.java类文件中的代码创建片段,Logcat会生成更简洁的错误,详细解释问题并抱怨接口.这在项目模板活动+片段中进行了演示.虽然,<〜那个项目模板不会生成接口存根.


mas*_*ask 5

检查你的类路径,这可能是视图充气器找不到你的xml class ="de.androidbuch.activiti.task.TaskDetailsFragment"中定义的类定义,上面的路径可能是错误的.


小智 5

对我来说,它是在滚动堆栈跟踪后发现我发现我缺少android.permission.ACCESS_NETWORK_STATE的权限

添加此权限后,它已修复