为什么我的SlidingTabLayout重新启动我的活动?

时间:2016-02-08 11:19:07

标签: java android pagerslidingtabstrip

我有4个标签,如下所示,当我点击TagsHome时,它会重新启动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;
    }
}

}

1 个答案:

答案 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;
}}}

请记住,这可能是非常低效的,因为可能会不必要地创建碎片。