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)
(为了加载所有页面)时,第一个页面包含最后一个片段,而所有其他页面都是空的。是什么原因造成的?(我也将更新描述)。