【问题标题】:ViewPager FragmentPagerAdapter NullpointerViewPager FragmentPagerAdapter Nullpointer
【发布时间】:2012-06-21 10:18:03
【问题描述】:

我在 Android Support package 中使用 ViewPager 时遇到此错误。从水平视图滑动ViewPager Tutorial

06-19 13:07:25.950: E/AndroidRuntime(16382): FATAL EXCEPTION: main
06-19 13:07:25.950: E/AndroidRuntime(16382): java.lang.NullPointerException
06-19 13:07:25.950: E/AndroidRuntime(16382):    at android.support.v4.app.BackStackRecord.doAddOp(BackStackRecord.java:347)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at android.support.v4.app.BackStackRecord.add(BackStackRecord.java:342)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at android.support.v4.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:97)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:649)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at android.support.v4.view.ViewPager.populate(ViewPager.java:783)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1016)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at android.view.View.measure(View.java:12728)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:594)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:376)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at android.view.View.measure(View.java:12728)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at android.view.View.measure(View.java:12728)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1369)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at android.widget.LinearLayout.measureVertical(LinearLayout.java:660)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:553)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at android.view.View.measure(View.java:12728)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2092)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at android.view.View.measure(View.java:12728)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1064)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at android.os.Handler.dispatchMessage(Handler.java:99)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at android.os.Looper.loop(Looper.java:137)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at android.app.ActivityThread.main(ActivityThread.java:4424)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at java.lang.reflect.Method.invokeNative(Native Method)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at java.lang.reflect.Method.invoke(Method.java:511)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

    标签: android fragment android-viewpager


    【解决方案1】:

    以防万一有人不阅读 passsy 的答案,这里是有用答案的摘要:

    1) 非常仔细地检查您的getItem(int index) 方法,并寻找任何可能导致您最终得到null 片段的逻辑、场景或缺少“中断”语句。

    2) 检查getCount() 返回的计数与getItem(int index) 返回的片段数是否匹配。

    3) 检查您的导入并确保您没有将android.app.Fragmentandroid.support.v4.app.Fragment 混用

    【讨论】:

    • 这应该是公认的答案。错误堆栈在所有三个帐户上都被抛出。在我的例子中,我没有实现一个 Fragment 类来扩展特定选项卡的视图。我假设从 getItem() 方法返回 null 会在我的 Activity 中呈现没有关联片段的选项卡(标题)。从 getItem() 为每个选项卡返回一个片段为我解决了这个问题。
    • 发生在我身上,选项 1 是票 - 只是共享 - 在 getItem(int index) 中使用了 switch case,case 标签是 0、2、3,也会导致同样的异常。谢谢。
    【解决方案2】:

    这是一个简单的解决方案。我混合了 android.app.Fragmentandroid.support.v4.app.Fragment

    希望这对某人有所帮助

    【讨论】:

    • 你确定这是解决办法吗?我有完全相同的堆栈跟踪,但没有 android.app.Fragment 的实例 ...
    • 你有android.app.Activity还是android.app.FragmentActivity?使用 android.support.v4.app 中的所有内容
    • 我发现了问题,我的 getItem() 中的一个 switch case 掉到了底部,默认返回 null。
    • 该死,在 getItem 中也有一个空指针。所以提示大家这个错误:用细梳检查你的 getItem。
    • 这发生在我身上,因为我在 getCount() 中返回的数字与选项卡的数量不同。
    【解决方案3】:

    如果您的 Adapter 中的 getItem() 返回可能导致空指针异常的 null。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多