【问题标题】:TabPagerIndicator goes wrong with Navigation drawerTabPagerIndicator 在导航抽屉中出错
【发布时间】:2014-11-30 16:51:49
【问题描述】:

演示问题的示例代码在这里:

https://github.com/Beeder/TestTabPager

(格式更好的问题,请看我的github项目TestTabPagerREADME)

从 Android Studio 0.8.6 导出


我是android编程的新手,最近我使用导航抽屉和viewpageindicator,但我卡在这里了。

选中item0,正确显示item0的3个tab片段,选中item1,完成后再次选中item0,item0的3个tab片段显示但只显示3个tab,对应的内部片段为没了!更奇怪的是,当我在这三个选项卡之间滑动时,TAB0和TAB2的内部片段又出现了,但是TAB1的内部片段没有出现!为什么?

详情如下: 根据本教程(www.tutecentral.com/android-custom-navigation-drawer/),我创建了一个这样的导航抽屉活动:

raw.githubusercontent.com/Beeder/MyStorage/master/Image/TestTabPager/Screenshot_2014-10-06-17-25-59.png

(对不起,我的声望不超过10,你可以把网址粘贴到浏览器上看图片。)

为了演示,只添加了两个抽屉项目。选择项目0时,此处还会出现Item0片段(在我的项目中命名新闻):

raw.githubusercontent.com/Beeder/MyStorage/master/Image/TestTabPager/Screenshot_2014-10-06-17-26-14.png

在 NewsFragment 中,我使用 JakeWharton 的 Android-ViewPagerIndicator(github.com/JakeWharton/Android-ViewPagerIndicator),更具体地说是 TabPageIndicator。 共有三个选项卡,选择一个选项卡,显示对应的TabFragment(x)。

选择抽屉项1时,显示:

raw.githubusercontent.com/Beeder/MyStorage/master/Image/TestTabPager/Screenshot_2014-10-06-17-26-24.png

但是,当我再次选择抽屉 item0 时,除了三个选项卡外,一切都消失了!这意味着未显示 TabFragment(x) 的 TextView。为什么?

更奇怪,我在这三个选项卡之间滑动后,TAB0和TAB2的内部片段(TextView)再次显示,但TAB1的内部片段没有显示!为什么?那是因为TAB1在中间吗?

我尝试了很多方法来解决它,在 NewsFragment 中,我覆盖 onStop() 和 onViewStateRestored() 以获取最后选择的选项卡,但 tabPageIndicator.setCurrentItem(selectedItem);doesn 似乎并没有真正触发 Fragment getItem(int position) 方法,选择选项卡的内部片段不会再次创建!

@Override
    public void onStop() {
        super.onStop();

        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putInt("NewsSelected",pager.getCurrentItem());
        editor.commit();

        Log.d("MyTag", "NEWS--onStop");
    }



@Override
    public void onViewStateRestored(Bundle savedInstanceState) {
        super.onViewStateRestored(savedInstanceState);

        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
        int selectedItem=sharedPreferences.getInt("NewsSelected",0);//Default value =0
        Toast.makeText(getActivity(), "Last time, you chose TAB"+selectedItem, Toast.LENGTH_SHORT).show();
        tabPageIndicator.setCurrentItem(selectedItem);//reselect the tab last selected. but the inner fragment isn't recreated, i got empty, why?
        //pager.setAdapter(tabPageIndicatorAdapter);
        //tabPageIndicator.setViewPager(pager);

        Log.d("MyTag", "NEWS--onViewStateRestored");
    }

我想这与不保存InstanceState有关,但我不知道该怎么办,我已经挣扎了两天,如果你能帮助我,我将不胜感激。

再次感谢。

【问题讨论】:

    标签: java android android-fragments android-viewpager android-navigation


    【解决方案1】:

    深入研究后,我想通了。

    FragmentPagerAdapter 是主要问题。在用FragmentStatePagerAdapter 替换FragmentPagerAdapter 并跟踪所有活动的内部片段之后,我已经解决了我的问题。

    非常感谢this answer。

    如果你会看中文,this blog可能会帮助你更好地理解。

    如需了解详情,请随时查看我的项目README!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多