FragmentStatePagerAdapter与ChildFragmentManager - FragmentManagerImpl.getFragment导致NullPointerException异常 [英] FragmentStatePagerAdapter with ChildFragmentManager - FragmentManagerImpl.getFragment results in NullPointerException

查看:1946
本文介绍了FragmentStatePagerAdapter与ChildFragmentManager - FragmentManagerImpl.getFragment导致NullPointerException异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

编辑2

我现在设法摆脱错误的使用从这里的伎俩<一href="https://$c$c.google.com/p/android/issues/detail?id=42601#c10">https://$c$c.google.com/p/android/issues/detail?id=42601#c10所以这就是reoson为什么我的最后一次编辑放在了我的问题之上。

I now managed to get rid of the error with using the trick from here https://code.google.com/p/android/issues/detail?id=42601#c10 so that's the reoson why my last edit is placed on top of my question.

但是,这导致了一个错误:

But this led to the next error:

java.lang.NullPointerException
at android.support.v4.app.FragmentManagerImpl.getFragment(FragmentManager.java:569)
at android.support.v4.app.FragmentStatePagerAdapter.restoreState(FragmentStatePagerAdapter.java:211)
at android.support.v4.view.ViewPager.onRestoreInstanceState(ViewPager.java:1281)
at android.view.View.dispatchRestoreInstanceState(View.java:12043)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2688)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2694)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2694)
at android.view.View.restoreHierarchyState(View.java:12021)
at android.support.v4.app.Fragment.restoreViewState(Fragment.java:425)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:949)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4800)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:798)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:565)
at dalvik.system.NativeStart.main(Native Method)

现在我不知道在哪里继续...

And now I don't know where to continue...

修改0 - 第一个问题

我得到以下异常:

java.lang.IllegalStateException: No activity
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1091)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1086)
at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1877)
at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1492)
at android.support.v4.app._HoloFragment.performActivityCreated(_HoloFragment.java:251)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:947)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4800)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:798)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:565)
at dalvik.system.NativeStart.main(Native Method)

我不知道从哪里开始。我使用的是最新的支持库(V4,rev18)。

I have no idea where to start. I'm using the up to date support library (v4, rev18).

一切工作正常,直到我添加了一个片段其持有 ViewPager 组合FragmentStatePagerAdapter

Everything works fine until I add a Fragment which holds a ViewPager in combination with FragmentStatePagerAdapter.

我使用的是支持库到处都是,我想从<一个解决方案href="https://$c$c.google.com/p/android/issues/detail?id=42601">https://$c$c.google.com/p/android/issues/detail?id=42601...

I'm using the support library everywhere, I tried the solutions from https://code.google.com/p/android/issues/detail?id=42601...

但没有奏效尚未...

But nothing worked yet...

我不知道从哪里开始,没有任何人有一个提示?

I don't know where to start, does anyone have a hint?

修改1:背景和code

1)在我MainActivity我使用下列内容:

第三页有viewpager ...

The third page has the viewpager...

public void setPage(int pos, boolean addToBackStack)
 {
    Fragment nextFragment = null;
    FragmentTransaction transaction = null;

    switch (pos)
    {
        case 0:
            if (mFragmentAllRoutines == null)
                mFragmentAllRoutines = new RoutinesListFragment();
            if (!mFragmentAllRoutines.isVisible())
                nextFragment = mFragmentAllRoutines;
            break;
        case 1:
            if (mFragmentRoutine == null)
                mFragmentRoutine = new RoutineFragment();
            if (!mFragmentRoutine.isVisible())
                nextFragment = mFragmentRoutine;
            break;
        case 2:
            if (mFragmentDay == null)
                mFragmentDay = new RoutineDayFragment();
            if (!mFragmentDay.isVisible())
                nextFragment = mFragmentDay;
            break;
        default:
            break;
    }

    if (nextFragment != null)
    {
        // Fragment prevFragment = getSupportFragmentManager().findFragmentById(R.id.fragment);
        transaction = getSupportFragmentManager().beginTransaction();
        // if (prevFragment != null)
        //    transaction.detach(prevFragment);
        transaction.replace(R.id.fragment, nextFragment, nextFragment.getClass().getName());
        // transaction.attach(nextFragment);
        if (addToBackStack)
            transaction.addToBackStack(null);
        transaction.commit();
    }
}

2)的第三个片段:

2) the third fragment:

这是一个简单的片段与ViewPager和FragmentStatePagerAdapter。该FragmentStatePagerAdapter获得的在 getChildFragmentManager()作为FragmentManager。而地方似乎有问题。

It's a simple Fragment with a ViewPager and a FragmentStatePagerAdapter. The FragmentStatePagerAdapter get's the getChildFragmentManager() as FragmentManager. And somewhere there seems to be the problem.

推荐答案

我没有足够的信誉评论...所以我必须写一个答案......

I don't have enough reputation to comment ... so I have to write an answer ...

我需要看到更多的code,以便知道在哪里应用此......但我也有类似的情况,你没有...我解决了childFragment问题,以同样的方式,并得到了相同空指针异常,因为你。

I would need to see more code in order to know where to apply this ... but I had a similar situation as you did... I solved the childFragment issue the same way, and got the same null pointer exception, as you have.

我还是设法解决这个问题......我会尽力来形容我的解决方案,为您所提供我不能确定在何处应用了修复的code ......这真的是一个修复......这不是一个优雅的方式来解决这个问题!它也不过帮我,我也不需要恢复状态,一旦我离开导航视图上寻呼机,所以没有缺点的我。

I did manage to solve it... I'll try to describe my solution, as with the code you supplied I am unsure as to where to apply the "fix" ... It really is a fix ... it's not an elegant way to solve this! It did however helped me, and I don't need to restore states once I navigate away on the view Pager, so no downside for me.

我有多个片段,实现了code静态位和onDetach(上<一个href="https://$c$c.google.com/p/android/issues/detail?id=42601#c10">https://$c$c.google.com/p/android/issues/detail?id=42601#c10),每个片段有一个寻呼机和onCreateView附上扩展FragmentStatePagerAdapter的适配器。

I have multiple Fragments, that implement the static bit of code and the onDetach (on https://code.google.com/p/android/issues/detail?id=42601#c10), each fragment has a pager, and onCreateView I attach an adapter that extends FragmentStatePagerAdapter.

在这些适配器我已经覆盖了restoreState方法什么都不做。

on those adapters I have overridden the restoreState method to do nothing

    @Override
public void restoreState(Parcelable arg0, ClassLoader arg1) {
    //do nothing here! no call to super.restoreState(arg0, arg1);
}

再次,这是不是最好的方式......但它没有解决的的问题。

祝您好运!

这篇关于FragmentStatePagerAdapter与ChildFragmentManager - FragmentManagerImpl.getFragment导致NullPointerException异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆