错误的膨胀类的片段
我得到错误
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
当我通过肖像和风景模式切换。 我正在使用片段。 我的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>
如果我通过横向和纵向模式切换一切正常。 但是,当我点击我的片段(我可以看到我的片段),然后切换到另一种模式,我得到的错误。 任何想法我怎么能解决它? 在这里find了一些答案,但没有一个帮助我…
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
正如hdemirchian所说,确保使用:
import android.support.v4.app.Fragment;
还要确保使用片段的Activity扩展了FragmentActivity
而不是常规的Activity
,
import android.support.v4.app.FragmentActivity;
获得FragmentActivity
类。
exceptionandroid.view.InflateException: Binary XML file line: #... Error inflating class fragment
可能会发生,如果你在onActivityCreated()
被调用之前,你的片段内使用getActivity()
操作。 在这种情况下,您会收到错误的活动参考信息,因此无法依靠此参考。
例如下一个模式是错误的:
@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; }
正确的模式#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; }
正确的模式#2
@Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Button button = getActivity().findViewById(R.id...); button.setOnClickListener(...); }
确保你的Activity
扩展了FragmentActivity
。
我有同样的错误。 我整天都在挖,不知道但我想我已经尝试了25个解决scheme。 没有工作,直到凌晨2点,我发现我在应用程序清单xml缺less这一行:
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
该行在<application>
标签内。 我真的希望这有助于某人。 GL。
我有同样的问题。 我的解决scheme是在FragmentActivity中super.onCreate和setContentView的顺序
以下命令工作正常:
super.onCreate(savedInstanceState); setContentView(R.layout.fc_activity_list_profiles);
我遇到了同样的问题。 上面的提示都没有帮助我。 后来,我发现我所要做的就是修理我的import产品:
import android.app.Fragment;
至:
import android.support.v4.app.Fragment;
确保在片段的onCreateView方法中没有引发exception。 如果在此方法中引发任何exception,logcat将不会显示exception的确切细节,而是始终显示消息:
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)
碎片不能嵌套在XML中
很难理解这一点 – 如果你在FragmentManager
一个(可能)dynamic加载的片段中嵌套基于<fragment>
layout <fragment>
标签的XML布局,那么你就会发现奇怪的错误,试图膨胀你的fragment xml。
原来,这不被支持 – 它会工作得很好,如果你通过纯粹的FragmentManager
方法做到这一点。
我遇到了这个问题,因为我试图从xml中加载一个<DrawerLayout>
内的片段,当我popup后退堆栈时,这导致onCreateView()
方法崩溃。
你有没有尝试过:
<fragment android:name="de.androidbuch.activiti.task.TaskDetailsFragment" android:layout_width="fill_parent" android:layout_height="fill_parent" />
如果您的TaskDetailsFragment
扩展android.app.Fragment
,请在onCreateView()
进行更改。
返回你想要在Fragment中显示的视图 ,或者使用LayoutInflater将你的Layout转换为视图并返回。
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View mainview = inflater.inflate(R.layout.main, null); return mainview; }
希望这个作品。 🙂
检查你的类path,这可能是视图充气机无法find你的类定义在你的xml class =“de.androidbuch.activiti.task.TaskDetailsFragment”定义上面的path可能是错误的。
对我来说,它是在滚动堆栈跟踪后,我发现我缺lessandroid.permission.ACCESS_NETWORK_STATE的权限
添加此权限后,它已被修复
如果纵向和横向模式有单独的布局文件,并且在单击某个项目后更改方向时出现通货膨胀错误,则布局文件之间很可能存在差异。
当出现错误时,是否仅在横向模式下单击该项目时,或者仅在纵向模式下或双方都是如此? 您的TaskDetailsFragment活动是否使用可能在横向模式和纵向模式之间存在差异的布局文件?
上面提到的解决scheme都没有帮助我。 在日志中,我可以find如下所述的exception的细节:
06-19 16:20:37.885: E/AndroidRuntime(23973): Caused by: java.lang.RuntimeException: API key not found. Check that /meta-data/ android:name="com.google.android.maps.v2.API_KEY" android:value="your API key"/ is in the application element of AndroidManifest.xml.
我做了这个,我的代码正在工作!
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="AIzaSyCl1yGPZ3mpxxxxxxxAz2R-t7zcWVzrHUL9k"/> </application>
我出于不同的原因收到了这个错误。
重现步骤:
〜>我的问题是我创build了一个全新的空白应用程序。
〜>然后我从文件〜>新build文件菜单中生成一个自定义片段。
〜>通过添加布局和button等进行自定义片段
〜>在创build应用程序时为我自动生成的activity_my.xml中引用了新的自定义片段。 这样做可以让XML为我生成对象。
当通过File〜> New File Menu生成自定义片段时,Heres会自动生成一个接口函数存根,并将其放在片段类文件的底部。
这意味着你的MyActivity类必须实现这个接口。 如果没有,那么仅当从xml引用片段时才会出现上述错误。 通过完全删除XML中片段的引用,并通过MyActivity.java类文件中的代码创build片段,Logcat会生成一个更简明的错误,详细解释问题并抱怨接口。 这在“项目模板活动+片段”中进行了演示。 尽pipe<Project Template不会生成接口存根。
具有相同的错误types,其中显示了完全相同的logcat错误消息。 我需要修改位于Project->Properties
下的Java Build Path。 我已经包含了Google Maps相关的库,例如android-support-v4.jar
和google-play-services.jar
; 但是我错过了包括这些在'Order and Export'
选项菜单中的'Build class path'
。 也许错误在这里。
尝试将库包含到构build类path中。
类的构build顺序也可能触发错误,所以我的build议也是尝试重新排列构buildpath的顺序。 使用以下命令时,错误消失: 'my_project_name/src'->'my_project_name/gen'->'Android Private Libraries'
。 最后一个单元包含前面提到的jar文件。
在这种情况下,我的问题是在生命周期中稍后调用的一个方法中有一个简单的空指针exception。 这是导致“错误膨胀类片段”exception对我来说。 简而言之,请记得仔细检查exception堆栈跟踪的可能原因。
一旦我解决了空指针exception,我的碎片加载罚款。
在你的xml文件中,只需使用一个而不是标签。 inflater试图创build一个android.app.Fragment,它将在API <10上失败。所以你需要创build一个不同types的视图组。
使用ListFragment时出现此错误,但列表视图id是listView1而不是列表。
'你的内容必须有一个ListView的id属性是'android.R.id.list''
http://developer.android.com/reference/android/app/ListFragment.html
刚刚有这个相同的错误。 我的理由是我的片段类的可见性。 它被设置为默认值,应该是公开的。
你可以发布片段的onCreate
和onCreateView
方法吗? 我有完全相同的exception,这是由片段onCreate
方法中的exception引起的,当我解决了这个问题,它修复了错误膨胀类的片段。
我在android studio中收到这个错误的问题是,我的片段有一个相对的布局,而OnCreateView函数上的代码是
mDrawerListView = (ListView) inflater.inflate( R.layout.fragment_navigation_drawer, container, false);
你的代码是做同样的事情吗?
如果你想inheritanceAppCompatActivity ,那么你可以这样做 – 在activity xml中,使用像这样的FrameLayout –
<FrameLayout android:id="@+id/result_fragment" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/progress_frame"/>
并在活动onCreate
–
final FragmentManager supportFragmentManager = getSupportFragmentManager(); FragmentTransaction ft = supportFragmentManager.beginTransaction(); ft.replace(R.id.result_fragment, fphResultActivityFragment, "result fragment"); ft.commitAllowingStateLoss();
我得到了同样的错误,但我的问题是,我的片段没有在父活动的XML布局的ID。
如果要静态添加Fragment
,即在xml中,则可能错过了在Activity
类中实现OnFragmentInteractionListener
。 然后接口实现将解决这个问题。 如果dynamic添加Fragment
,也就是在Java类中,那么这不是解决scheme。 因为IDE本身不会让你继续执行所需的接口。
我也有类似的问题。 运行AdMob示例后 ,我试图在我的应用中插入广告,导致此错误:
01-02 16:48:51.269 8199-8199/it.dndc.BreathPlot E/AndroidRuntime﹕ FATAL EXCEPTION: main java.lang.IllegalStateException: Could not execute method of the activity Caused by: android.view.InflateException: Binary XML file line #57: Error inflating class fragment
解决方法是:您不能将广告的片段插入到ListActivity中。 相反,我可以将它添加到FragmentActivity和一个ActionBarActivity没有任何问题。
我的build议是:从AdMob示例开始,将其添加到您现有的应用程序中:我将节省很多时间!
确保你使用过这个
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="AIzaSyBEwmfL0GaZmdVqdTxxxxxxxx-rVgvY" />
不是这个..
<meta-data android:name="com.google.android.gms.version" android:value="AIzaSyBEwmfL0GaZmdVqdTCvxxxxxxx-rVgvY" />
确保你的Activity扩展了FragmentActivity或者AppCompatActivity
如果您的片段是一个List Fragment,那么使用该片段的活动必须实现onFragmentInteraction
接口。
就我而言,
... android.view.InflateException: Binary XML file line #24: Error inflating class fragment ... Caused by: java.lang.InstantiationException: class *.HomeFragment has no zero argument constructor ...
我添加空的构造函数后,它已解决。
public HomeFragment() {}