gpt4 book ai didi

android - 选项卡更改时保留以前加载的 fragment 实例,而不是在 android 中创建新 fragment 实例

转载 作者:行者123 更新时间:2023-11-29 19:46:04 27 4
gpt4 key购买 nike

我有一个选项卡滑动布局,其中包括四个选项卡,每个选项卡都有自己的布局和 fragment ,在我的主要 Activity 布局中,viewpager 参与更改选项卡。特定 View (选项卡)在应用程序启动时加载,其他 View 将在选项卡更改时加载。我的问题是,当我导航到第三个或第四个选项卡(而不是第二个选项卡)时,将创建其相应 fragment 的新实例而不是加载先前创建的 fragment (仅在第二个选项卡中发生的预期行为)。当我导航到第二个选项卡(SecondPageFragment())并再次返回到第一个选项卡时,它工作正常并且不会创建新的 IndexFragment,而是加载以前创建的 fragment 所以在这种情况下一切都很好,但是当我转到第三个或第四个选项卡然后返回到第一个选项卡时,它会创建一个新的 IndexFragment 实例。

这可能是什么原因,为什么它只发生在第三个、第四个等选项卡上,而只有第二个选项卡按预期正常工作????

这是我切换选项卡及其相应 fragment 的代码

public class TabsPagerAdapter extends FragmentPagerAdapter {

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

@Override
public Fragment getItem(int index) {

switch (index) {
case 0:
return new ForthPageFragment();

case 1:
return new ThirdPageFragment();
case 2:
return new SecondPageFragment();
case 3:
return new IndexFragment();
default :
break;
}

return null;
}

@Override
public int getCount() {
// get item count - equal to number of tabs
return 4;
}

}

这是我的主要 Activity 代码:

public class MainActivity extends  FragmentActivity implements
ActionBar.TabListener {
private ViewPager viewPager;
private TabsPagerAdapter mAdapter;
private ActionBar actionBar;
// Tab titles
private String[] tabs = { "صفحه چهارم","صفحه سوم","صفحه دوم","صفحه اصلی" };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Initilization
viewPager = (ViewPager)findViewById(R.id.tabpager);
actionBar = getActionBar();
mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(mAdapter);
actionBar.setHomeButtonEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// Adding Tabs
for (String tab_name : tabs) {
actionBar.addTab(actionBar.newTab().setText(tab_name)
.setTabListener(this));
}
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

@Override
public void onPageSelected(int position) {
// on changing the page
// make respected tab selected
actionBar.setSelectedNavigationItem(position);
}

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

@Override
public void onPageScrollStateChanged(int arg0) {
}
});
viewPager.setCurrentItem(3);
}

@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
viewPager.setCurrentItem(tab.getPosition());
}
}

最佳答案

viewPager.setOffscreenPageLimit(3);

关于android - 选项卡更改时保留以前加载的 fragment 实例,而不是在 android 中创建新 fragment 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37656540/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com