[英]Why does my SlidingTabLayout Restart my activity?
我有4個標簽,如下所示,當我從“ Tags
單擊“ Home
它將重新啟動“ Home activity
。 這是為什么??
此外,我的slidingtabLayout
有點slidingtabLayout
,這與home activity
重啟有關嗎?
public class SectionsPagerAdapter extends FragmentStatePagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
//2 steps creating a fragment, create the fragment class and create the UI for it
Fragment fragment = null;
//we dont want it to return our place holder Fragment instead we want to switch bewtween 3
//create a switch case based on the position applied or the fragment selected
switch (position) {
case HOME:
fragment = Dashboard.newInstance("","");
break;
case TAGS:
fragment = Tags.newInstance("","");
break;
case MY_RECENT:
fragment = MyPosts.newInstance("","");
break;
case TOP;
fragment = Top.newInstance("", "");
break;
}
return fragment;
}
@Override
public int getCount() {
// Show 3 total pages.
return 4;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "Home";
case 1:
return "Top";
case 2:
return "Recent";
case 3:
return "Tags";
}
return null;
}
}
}
這是因為您每次用戶更改選項卡時都在創建每個片段的新實例。 另外,我認為您應該擴展FragmentPagerAdapter
而不是FragmentStatePagerAdapter
。
如果在SectionsPagerAdapter
構造函數中創建Fragments,則保留對它們的引用作為成員變量,然后在getItem()
方法中返回對片段的引用,它將停止重新創建片段。
也許嘗試這樣的事情:
public class SectionsPagerAdapter extends FragmentPagerAdapter {
Fragment mDashboardFragment;
Fragment mTagsFragment;
Fragment mMyRecentFragment;
Fragment mTopFragment;
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
mHomeFragment = Dashboard.newInstance("","");
mTagsFragment = Tags.newInstance("","");
mMyRecentFragment= MyPosts.newInstance("","");
mTopFragment = Top.newInstance("", "");
}
@Override
public Fragment getItem(int position) {
Fragment fragment = null;
//create a switch case based on the position applied or the fragment selected
switch (position) {
case HOME:
fragment = mDashboardFragment;
break;
case TAGS:
fragment = mTagsFragment;
break;
case MY_RECENT:
fragment = mMyRecentFragment;
break;
case TOP;
fragment = mTopFragment;
break;
}
return fragment;
}
@Override
public int getCount() {
// Show 3 total pages.
return 4;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "Home";
case 1:
return "Top";
case 2:
return "Recent";
case 3:
return "Tags";
}
return null;
}}}
請記住,這可能效率很低,因為可能不必要地創建碎片。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.