我有4个标签,如下所示,当我点击Tags
到Home
时,它会重新启动Home activity
。这是为什么??
此外,我的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;
}
}
}
答案 0 :(得分:0)
这是因为每次用户更改选项卡时,您都在创建每个片段的新实例。另外我认为你应该扩展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;
}}}
请记住,这可能是非常低效的,因为可能会不必要地创建碎片。