在我小的Android应用程序,我有一个ViewPager
3个页面,每个页面包含一个片段,这是所有工作的罚款与FragmentStatePagerAdapter
(见earlier question)。ViewPager包含多个片段一页“java.lang.IllegalArgumentException异常:未找到ID视图”
现在对于大屏幕,我想保持一个ViewPager
,但我希望第一个两个片段是相同的第一页上。
对于这一点,我实现自己的PagerAdapter,这主要是工作,当我旋转屏幕,我试图解决的唯一的问题是,我得到一个错误:
12-11 16:34:13.526: ERROR/AndroidRuntime(9221): FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.matthieu/com.matthieu.TestActivity}: java.lang.IllegalArgumentException: No view found for id 0x7f030002 (com.matthieu:id/top_fragment) for fragment TestFragment{481a3a98 #0 id=0x7f030002}
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3815)
at android.app.ActivityThread.access$2400(ActivityThread.java:125)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2037)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:871)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalArgumentException: No view found for id 0x7f030002 (com.matthieu:id/top_fragment) for fragment TestFragment{481a3a98 #0 id=0x7f030002}
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:903)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1070)
at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1861)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:547)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1129)
at android.app.Activity.performStart(Activity.java:3781)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2636)
... 12 more
我把样品代码中模拟什么,我试图做(并显示此错误消息)上GitHub。我想我遇到的一个问题是因为我在实际应用中存在的碎片,我实际上没有static newInstance
的构造函数,但是提前创建碎片并且有'setRetainInstance(true);'组。
我明白了viewGroup
的ID将包含片段should be part of the hierarchy,最后,我想,这是...
如果这有什么差别,我使用的是支持库和SherlockActionBar保持向后兼容旧设备。
如何去这个任何想法?
编辑:我发现,如果我删除onSaveInstanceState
从FragmentManager
的片段,我没有得到任何崩溃了。所有片段从头这不是我想要的重建,但我想我可能要做到这一点,不知何故后来恢复这些片段....
使用嵌套的片段我的解决办法,我列出了几个方法,帮助您解决原来的问题这里:http://commonsware.com/blog/2012/08/20/multiple-view-viewpager-options.html – CommonsWare
@CommonsWare马克,感谢您的关注:)我实际上阅读过这篇博文。我认为只有第二种方法可行,因为我将页面水平分割。我将再次阅读该页面,看看我是否可以从那里选择一些想法。 – Matthieu
@CommonsWare这些不同的方法都不起作用。最接近的一个是第二个,但它不包括页面中的碎片,只包含简单的小部件...我尝试了所有我能做的并且用尽想法。除非有人真的有一些好主意,否则我不得不以另一种方式解决这个问题。 – Matthieu