Android选项卡无法正确切换

Android选项卡无法正确切换,android,android-fragments,tabs,android-viewpager,Android,Android Fragments,Tabs,Android Viewpager,因此,我在FragmentPagerAdapter类的getItem方法中有一些简单的代码: @Override public Fragment getItem(int i) { switch (i) { case 0:{ return new FragmentOne(); } default: return new FragmentTwo(); } } 其他信息:getCount返

因此,我在
FragmentPagerAdapter
类的
getItem
方法中有一些简单的代码:

@Override
public Fragment getItem(int i) {
    switch (i) {
        case 0:{
            return new FragmentOne();
        }
        default:
            return new FragmentTwo();
    }
}
其他信息:
getCount
返回4

然而,发生的事情是,第一个片段显示正确,但其余三个选项卡似乎出现故障。当我滑动一次时,它会正确显示。我再次向右滑动(因此选项卡#3),没有显示任何内容。再次向右滑动(选项卡4)无任何内容。向左滑动(选项卡3)显示正确。向左滑动(选项卡2)无任何内容。选项卡1始终正确显示。我的碎片内部是什么导致了这个奇怪的错误?这肯定与我的碎片有关,我知道:)

编辑:为了澄清这个问题,我尝试稍微改变一下环境-我做了ViewPager.setOffscreenPageLimit(3)以加载所有选项卡。我做了4个箱子,每个箱子都有不同的碎片。现在发生的是,应该在最后一个选项卡中的片段被加载到第一个选项卡中,而所有其他选项卡都是空的


提前谢谢

试试这样的东西。为您的活动编写内部类:

class TabsPagerAdapter extends FragmentStatePagerAdapter {

    public TabsPagerAdapter(FragmentManager fragmentManager) {
        super(fragmentManager);
    }

    @Override
    public Fragment getItem(int index) {
        switch (index) {
            case 0:
                return firstTabFragment;
            case 1:
                return secondTabFragment;
        }
        return null;
    }

    @Override
    public int getCount() {
        return 2;
    }

}
在onCreate方法中的片段类中写入setRetainInstance(true)

在onCreate方法中的活动中,按如下方式注册片段和选项卡:

    // for fragments
    FragmentManager fragmentManager = getSupportFragmentManager();

    firstTabFragment = (FirstTabFragment) fragmentManager.findFragmentByTag(TAG_FIRST_FRAGMENT);
    if (firstTabFragment == null) {
        firstTabFragment = new FirstTabFragment();
        fragmentManager.beginTransaction()
                .add(R.id.pager, firstTabFragment, TAG_FIRST_FRAGMENT)
                .commit();
        firstTabFragment.setData(yourDataIfNeeded);
    }

    // for tabs
    String[] tabs = {getString(R.string.first_tab), getString(R.string.second_tab)};
    viewPager = (ViewPager) findViewById(R.id.pager);
    actionBar = getActionBar();
    TabsPagerAdapter mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
    viewPager.setAdapter(mAdapter);
    actionBar.setHomeButtonEnabled(false);
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    for (String tabText : tabs) {
        Tab tab = actionBar.newTab();
        tab.setText(tabText);
        tab.setTabListener(this);
        actionBar.addTab(tab);
    }

    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            actionBar.setSelectedNavigationItem(position);
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
        }

        @Override
        public void onPageScrollStateChanged(int arg0) {
        }
    });
还为您的活动添加onSaveInstanceState方法,如下所示:

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
    savedInstanceState.putString(KEY_DATA, yourDataIfNeeded);
}

执行此操作时,您的设备是否已连接到您的机器?如果是这样的话,当这种情况发生时,LogCat中的日志会说什么?它已经连接好了。LogCat中没有指向适配器的内容。非常感谢您的回答!不幸的是,这并没有完全解决我的问题。是我的错,我应该说得更清楚。因此,这里出现的问题可能更好一些:当我执行
ViewPager.setOffScreenPageLimit(3)
(为了加载所有页面)时,第一个页面包含最后一个片段,而所有其他页面都是空的。是什么原因造成的?(我也将更新描述)。