我正在使用傑克·沃頓的ViewPagerIndicator來製作可滑動的選項卡。目前,我可以使它在我的應用程序中運行,並帶有4個選項卡。但顯然,當我更改頁面/選項卡時,每個片段都會重新創建。例如,如果我處於選項卡A中,切換到選項卡C並返回到選項卡A,則A選項卡的片段會再次重新創建,而不僅僅是將舊選項放到頁面的前面。ViewPagerIndicator - 如何避免每次返回時在片段中重新加載數據
我嘗試關注該庫的示例。這裏是我的代碼看起來是這樣的:
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
類TestFragmentAdapter
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方法中擁有的片段對象,但它仍然不起作用。
我已經嘗試過的另一個解決方案是saveInstanceState在每個片段中,但不起作用。我錯過了什麼嗎?提前致謝。
編輯
對不起,我的錯誤,我想這不是「重新實例片段」相關的問題。在進行了更多的調試之後,我發現只有在FragmentAdapter中顯示片段的情況下才會重新載入數據。在我的片段中,我從OnCreateView方法中的Web服務器加載數據。從Android文檔,我想我應該加載數據,我需要在OnCreate方法來解決這個問題,我是對嗎?謝謝。
根據我更新的問題,我在下面的答案中考慮@Neoh評論是更正的答案。 – bangandi 2013-05-26 00:18:29