我正在使用 Jake Wharton 的ViewPagerIndicator制作一个可滑动的标签。目前我可以让它在我的应用程序中运行,其中有 4 个选项卡。但显然,当我更改页面/选项卡时,每个片段都会重新创建。例如,如果我在选项卡 A 中,切换到选项卡 C,然后返回选项卡 A,则重新创建 A 选项卡的片段,而不仅仅是将旧的片段带到页面前面。
我尝试遵循图书馆的例子。这是我的代码的样子:
ProfileViewPagerActivity
private static final String[] TAB_TITLES = new String[] { "Info",
"Personal Event", "Favorite", "Attending" };
TestFragmentAdapter mAdapter;
ViewPager mPager;
PageIndicator mIndicator;
int action;
User user;
@Override
protected void onCreate(Bundle arg0) {
// TODO Auto-generated method stub
super.onCreate(arg0);
setContentView(R.layout.simple_tabs);
action = getIntent().getIntExtra(Constants.LOAD_WHAT, Constants.LOAD_MY_PROFILE);
user = (User) getIntent().getSerializableExtra(Constants.USER);
mAdapter = new TestFragmentAdapter(getSupportFragmentManager());
mPager = (ViewPager) findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
mIndicator = (TabPageIndicator) findViewById(R.id.indicator);
mIndicator.setViewPager(mPager);
}
这是适配器作为 ProfileViewPagerActivity 中的一个类
测试片段适配器
private int mCount = TAB_TITLES.length;
public TestFragmentAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return UserInfoFragment.newInstance(action,user);
case 1:
return EventListFragment.newInstance(user.getUsername(), Constants.LIST_MINE, action);
case 2:
return EventListFragment.newInstance(user.getUsername(), Constants.LIST_FAVORITE, action);
case 3:
return EventListFragment.newInstance(user.getUsername(), Constants.LIST_ATTENDED, action);
}
return null;
}
@Override
public int getCount() {
return mCount;
}
@Override
public CharSequence getPageTitle(int position) {
return TAB_TITLES[position].toUpperCase(Locale.US);
}
使用上面的代码,每次我更改选项卡时,片段都会重新创建自己。我尝试采用不同的方法,例如为 TestFragmentAdapter 构造函数中的每个片段调用 newInstance() 方法,然后只调用我在 getItem 方法中已有的片段对象,它仍然不起作用。
我已经尝试过的另一个解决方案是在每个片段中保存实例状态,但也不起作用。我错过了什么吗?提前致谢。
编辑
对不起,我的错误,我想这不是“重新实例化的片段”相关的问题。在进行更多调试后,我发现如果片段显示在 FragmentAdapter 中,则只有数据会再次重新加载。在我的片段中,我在 OnCreateView 方法中从 Web 服务器加载数据。从 android 文档中,我想我应该在 OnCreate 方法中加载我需要的数据来解决这个问题,对吗?谢谢。