Android Viewpager内部碎片,按下后退按钮时崩溃
我在片段中有Viewpager。它工作得很好 当我为包含Viewpager的片段的开始和退出添加动画时,问题就开始了Android Viewpager内部碎片,按下后退按钮时崩溃,android,android-fragments,android-viewpager,android-animation,Android,Android Fragments,Android Viewpager,Android Animation,我在片段中有Viewpager。它工作得很好 当我为包含Viewpager的片段的开始和退出添加动画时,问题就开始了 transaction.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left, R.anim.slide_in_left, R.anim.slide_out_right); 复制这个问题很容易需要滑动viewpager并立即按下后退按钮。 例外情况是: E/AndroidRuntime﹕ FATAL E
transaction.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left, R.anim.slide_in_left, R.anim.slide_out_right);
复制这个问题很容易需要滑动viewpager并立即按下后退按钮。
例外情况是:
E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: xx.xxxxx, PID: 28590
java.lang.IllegalArgumentException: No view found for id 0x7f070076 (xx.xxxxx:id/facts_pager) for fragment FactsSlidePageFragment{435056b8 #7 id=0x7f070076}
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:930)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1115)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1478)
at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:478)
at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:163)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1068)
at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
at android.support.v4.view.ViewPager$3.run(ViewPager.java:244)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
at android.view.Choreographer.doCallbacks(Choreographer.java:574)
at android.view.Choreographer.doFrame(Choreographer.java:543)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
以及同一日志的另一部分:
08-08 20:20:26.791 D/TAG﹕ Viewpager onPageSelected() event
08-08 20:20:27.061 D/TAG﹕ Fragment on pause called!
08-08 20:20:27.331 D/TAG﹕ FragmentStatePagerAdapter getItem() called. position = 2
08-08 20:20:27.331 E/FragmentManager﹕ No view found for id 0x7f070076 (xx.xxxxx:id/facts_pager) for fragment FactsSlidePageFragment{435056b8 #7 id=0x7f070076}
据我从日志的最后一部分了解,当我滑动ViewPager时,它需要新的幻灯片片段。他在FragmentStatePagerAdapter中问道,但正如你们所看到的,这个调用是在fragment的onPause调用之后发生的。还有一些问题,因为fragment正在关闭,而viewpager正在尝试做一些事情,同时填充自身
如果我删除这个片段上的动画,一切正常,没有崩溃。
另外,如果我在ViewPager中选择页面后没有快速按下后退按钮,也可以
如果我仍然想在这个片段的开始和结束时使用动画,如何打败它
UPD1:
唯一类似的问题是:
此代码为我解决了问题: 内部MainActivity onBackPressed(): 在MyFragment内部:
public void removeAdapterFromPager(){
mViewPager.setAdapter(null);
}
这么多年后,很抱歉打扰您,但我想知道您是否设法解决了这个问题?我也经历了同样的事情。@ZassX当时我不得不删除动画。也许现在有一个更优雅的解决方案:)这里也是一样,我希望有其他的想法。无论如何,谢谢你:)
FragmentManager fm = getSupportFragmentManager();
FragmentBase myFragment = (FragmentBase) fm
.findFragmentByTag(ParserConstants.FRAGMENT_MAIN);
if (myFragment instanceof MyFragment) {
((MyFragment) myFragment).removeAdapterFromPager();
}