动作条与ViewPager - 单击部分可见的选项卡崩溃的应用程序 [英] ActionBar with ViewPager - clicking partially visible tab crashes the app
问题描述
我使用的是ViewPager显示4个不同的片段。我用的是操作栏显示选项卡的导航。它看起来像这样:
I'm using a ViewPager to display 4 different fragments. I use the action bar to display the tabs for the navigation. It looks like that:
我的问题是最初3的翼片是完全可见和最后一个是部分可见的。点击任何第3选项卡中的OK,但是当我点击最后一个,应用程序崩溃:
My problem is that initially 3 of the tabs are fully visible and the last one is partially visible. Clicking on any of the first 3 tabs is ok but when I click on the last one, the app crashes:
09-06 13:35:01.825: E/AndroidRuntime(6676): FATAL EXCEPTION: main
09-06 13:35:01.825: E/AndroidRuntime(6676): java.lang.IllegalStateException: Content view not yet created
09-06 13:35:01.825: E/AndroidRuntime(6676): at android.support.v4.app.ListFragment.ensureList(ListFragment.java:328)
09-06 13:35:01.825: E/AndroidRuntime(6676): at android.support.v4.app.ListFragment.getListView(ListFragment.java:222)
09-06 13:35:01.825: E/AndroidRuntime(6676): at com.szymontrapp.englishverbs.DictionaryListFragment.onLoadFinished(DictionaryListFragment.java:200)
09-06 13:35:01.825: E/AndroidRuntime(6676): at com.szymontrapp.englishverbs.DictionaryListFragment.onLoadFinished(DictionaryListFragment.java:1)
09-06 13:35:01.825: E/AndroidRuntime(6676): at android.support.v4.app.LoaderManagerImpl$LoaderInfo.callOnLoadFinished(LoaderManager.java:427)
09-06 13:35:01.825: E/AndroidRuntime(6676): at android.support.v4.app.LoaderManagerImpl.initLoader(LoaderManager.java:562)
09-06 13:35:01.825: E/AndroidRuntime(6676): at com.szymontrapp.englishverbs.DictionaryListFragment.onCreate(DictionaryListFragment.java:94)
09-06 13:35:01.825: E/AndroidRuntime(6676): at android.support.v4.app.Fragment.performCreate(Fragment.java:1455)
09-06 13:35:01.825: E/AndroidRuntime(6676): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:893)
09-06 13:35:01.825: E/AndroidRuntime(6676): at android.support.v4.app.FragmentManagerImpl.performPendingDeferredStart(FragmentManager.java:823)
09-06 13:35:01.825: E/AndroidRuntime(6676): at android.support.v4.app.Fragment.setUserVisibleHint(Fragment.java:819)
09-06 13:35:01.825: E/AndroidRuntime(6676): at android.support.v4.app.FragmentPagerAdapter.setPrimaryItem(FragmentPagerAdapter.java:130)
09-06 13:35:01.825: E/AndroidRuntime(6676): at android.support.v4.view.ViewPager.populate(ViewPager.java:1066)
09-06 13:35:01.825: E/AndroidRuntime(6676): at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:550)
09-06 13:35:01.825: E/AndroidRuntime(6676): at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:509)
09-06 13:35:01.825: E/AndroidRuntime(6676): at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:490)
09-06 13:35:01.825: E/AndroidRuntime(6676): at com.szymontrapp.englishverbs.DictionaryActivity$4.onTabSelected(DictionaryActivity.java:91)
09-06 13:35:01.825: E/AndroidRuntime(6676): at android.support.v7.app.ActionBarImplICS$TabWrapper.onTabSelected(ActionBarImplICS.java:454)
09-06 13:35:01.825: E/AndroidRuntime(6676): at com.android.internal.app.ActionBarImpl.selectTab(ActionBarImpl.java:587)
09-06 13:35:01.825: E/AndroidRuntime(6676): at com.android.internal.app.ActionBarImpl$TabImpl.select(ActionBarImpl.java:1084)
09-06 13:35:01.825: E/AndroidRuntime(6676): at com.android.internal.widget.ScrollingTabContainerView$TabClickListener.onClick(ScrollingTabContainerView.java:532)
09-06 13:35:01.825: E/AndroidRuntime(6676): at android.view.View.performClick(View.java:4211)
09-06 13:35:01.825: E/AndroidRuntime(6676): at android.view.View$PerformClick.run(View.java:17267)
09-06 13:35:01.825: E/AndroidRuntime(6676): at android.os.Handler.handleCallback(Handler.java:615)
09-06 13:35:01.825: E/AndroidRuntime(6676): at android.os.Handler.dispatchMessage(Handler.java:92)
09-06 13:35:01.825: E/AndroidRuntime(6676): at android.os.Looper.loop(Looper.java:137)
09-06 13:35:01.825: E/AndroidRuntime(6676): at android.app.ActivityThread.main(ActivityThread.java:4898)
09-06 13:35:01.825: E/AndroidRuntime(6676): at java.lang.reflect.Method.invokeNative(Native Method)
09-06 13:35:01.825: E/AndroidRuntime(6676): at java.lang.reflect.Method.invoke(Method.java:511)
09-06 13:35:01.825: E/AndroidRuntime(6676): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
09-06 13:35:01.825: E/AndroidRuntime(6676): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
09-06 13:35:01.825: E/AndroidRuntime(6676): at dalvik.system.NativeStart.main(Native Method)
看来莫名其妙的最后一个片段未加载开始。我使用的扩展FragmentPageAdapter和方法的GetItem一个自定义类只要求前3。
It seems that somehow the last fragment is not loaded initially. I'm using a custom class extending FragmentPageAdapter and GetItem method is called only for the first 3.
我应该尝试强行加载所有4个片段开始?另外,如何妥善处理负荷的最后一个片段?
Should I try to force load all 4 fragments initially? Alternatively, how to handle loading of the last fragment properly?
有相当多的视图四周寻呼机和那些片段code,我不知道有多少code,将需要回答我的问题。让我知道如果我需要张贴满code在这里。
There's quite a lot of code around the view pager and those fragments, I'm not sure how much code will be needed to answer my question. Let me know if I need to post the full code here.
推荐答案
启动装载机
的回调(如 onActivityCreated之一()
)运行的在的 onCreateView()
被称为所以你要确保在装载机
返回数据的速度非常快不把你尚未创建的片段
的看法,其中一个位置(在你的情况下,问题)。
Start the Loader
in one of the callbacks(like onActivityCreated()
) that run after the onCreateView()
is called so you make sure that the Loader
returning the data very fast doesn't put you in a position where the view of the Fragment
is not yet created(the problem in your case).
这篇关于动作条与ViewPager - 单击部分可见的选项卡崩溃的应用程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!