动作条与ViewPager - 单击部分可见的选项卡崩溃的应用程序 [英] ActionBar with ViewPager - clicking partially visible tab crashes the app

查看:152
本文介绍了动作条与ViewPager - 单击部分可见的选项卡崩溃的应用程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的是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屋!

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