【问题标题】:master/detail actionbar fragments主/详细操作栏片段
【发布时间】:2014-05-29 23:58:04
【问题描述】:

我找到了这个https://github.com/abidk/android_masterdetail_tab_issue,它正是我的应用程序的基础,来自 abidk 的出色工作。它在平板电脑上完美执行,添加更多片段非常容易,但在手机上却产生错误:可能是什么原因以及如何解决?

D/dalvikvm(3695): Late-enabling CheckJNI
D/AndroidRuntime(3695): Shutting down VM
W/dalvikvm(3695): threadid=1: thread exiting with uncaught exception (group=0x41b192a0)
E/AndroidRuntime(3695): FATAL EXCEPTION: main
E/AndroidRuntime(3695): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.example.masterdetail_tabs/com.example.example.masterdetail_tabs.ItemListActivity}: android.view.InflateException: Binary XML file line #1: Error inflating class fragment
E/AndroidRuntime(3695):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2092)
E/AndroidRuntime(3695):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2117)
E/AndroidRuntime(3695):     at android.app.ActivityThread.access$700(ActivityThread.java:134)
E/AndroidRuntime(3695):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1218)
E/AndroidRuntime(3695):     at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(3695):     at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(3695):     at android.app.ActivityThread.main(ActivityThread.java:4867)
E/AndroidRuntime(3695):     at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(3695):     at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(3695):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
E/AndroidRuntime(3695):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
E/AndroidRuntime(3695):     at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(3695): Caused by: android.view.InflateException: Binary XML file line #1: Error inflating class fragment
E/AndroidRuntime(3695):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
E/AndroidRuntime(3695):     at android.view.LayoutInflater.inflate(LayoutInflater.java:466)
E/AndroidRuntime(3695):     at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
E/AndroidRuntime(3695):     at com.example.example.masterdetail_tabs.Tab1Fragment.onCreateView(Tab1Fragment.java:18)
E/AndroidRuntime(3695):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:829)
E/AndroidRuntime(3695):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1035)
E/AndroidRuntime(3695):     at android.app.BackStackRecord.run(BackStackRecord.java:635)
E/AndroidRuntime(3695):     at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1399)
E/AndroidRuntime(3695):     at android.app.Activity.performStart(Activity.java:5056)
E/AndroidRuntime(3695):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2065)
E/AndroidRuntime(3695):     ... 11 more
E/AndroidRuntime(3695): Caused by: java.lang.ClassCastException: com.example.example.masterdetail_tabs.ItemListFragment cannot be cast to android.support.v4.app.Fragment
E/AndroidRuntime(3695):     at android.support.v4.app.Fragment.instantiate(Fragment.java:394)
E/AndroidRuntime(3695):     at android.support.v4.app.Fragment.instantiate(Fragment.java:369)
E/AndroidRuntime(3695):     at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:272)
E/AndroidRuntime(3695):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:676)
E/AndroidRuntime(3695):     ... 20 more
I/Process(3695): Sending signal. PID: 3695 SIG: 9

【问题讨论】:

  • 您有多个layout 文件夹吗?平板电脑和手机分别使用哪个 Android 版本?
  • 都是三星 Galaxy Tab 7" 4.1.2 和 Galaxy III mini 4.1.2。只有一个布局文件夹。我使用了github上的原始代码

标签: android android-fragments android-actionbar master-detail


【解决方案1】:

如果不查看您的代码,很难确定,但看起来您为 ItemListFragment 或使用它的 Activity 继承或导入了错误的 Fragment。

您的 logcat 将异常显示为:

Caused by: java.lang.ClassCastException: com.example.example.masterdetail_tabs.ItemListFragment cannot be cast to android.support.v4.app.Fragment

检查您的用法和导入等

import android.support.v4.app.Fragment;
 vs
import android.app.Fragment

还要注意 Activity 和 Fragment 的哪些变体可以使用哪些类型并与哪些 API 版本兼容。您应该阅读并关注official Android tutorial on Fragments 以获取更多信息和正确用法。

【讨论】:

  • 代码是github上的原始代码。我没有修改这个。
  • 原作者当时也在他们的代码中使用了混合版本。通读我认为在我的答案中的教程,以决定自己要使用哪个版本(support.v4、support.v7 或最新)并适当地修改导入和继承。
  • 我只是看了一下github上的代码。一团糟。作者确实混合了各种 Fragment 实现。奇怪的是它可以在一个设备上工作,但不能在另一个设备上工作......但这既不在这里也不在那里。代码最终会崩溃,并且已经崩溃了。
猜你喜欢
  • 1970-01-01
  • 2014-07-23
  • 1970-01-01
  • 1970-01-01
  • 2015-05-13
  • 1970-01-01
  • 1970-01-01
  • 2011-07-13
  • 1970-01-01
相关资源
最近更新 更多