我有4个选项卡,如下所示,当我单击from Tags to Home it restarts the 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;
}
}
}发布于 2016-02-08 19:34:56
这是因为每次用户更改选项卡时,都会创建每个片段的新实例。另外,我认为你应该扩展FragmentPagerAdapter而不是FragmentStatePagerAdapter。
如果您在SectionsPagerAdapter构造函数中创建片段,则将对它们的引用保留为成员变量,然后在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;
}}}请记住,这可能是非常低效的,因为可能会创建不必要的碎片。
https://stackoverflow.com/questions/35268387
复制相似问题