【发布时间】: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