android - fragment 在初始选项卡选择上重新初始化内容 - ANDROID

标签 android android-fragments tabs android-viewpager fragment-tab-host

我有一个应用程序正在使用充当 TabHost 的 ViewPager。问题是,当应用程序启动时,所有显示都正常,在所有 3 个选项卡之间滑动。

但是,在重新选择第一个选项卡后,应用程序会重新初始化但不会显示正确的内容,应用程序应保留 Fragments 当前状态而不是重新初始化。

代码:

TabAdapter.java

public class TabAdapter extends FragmentPagerAdapter{


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

@Override
public Fragment getItem(int position) {

    switch(position){
        case 0:
            return new MapFragmentView();
        case 1:
            return new LogView();
        case 2:
            return new SettingsView();
    }

    return null;
}

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

MapsActivity.java (Main Activity)

public class MapsActivity extends FragmentActivity implements ActionBar.TabListener {

private ViewPager viewPage;
private TabAdapter myAdapter;
private ActionBar actionBar;
public static FragmentManager fragmentManager;

private String[] tabNames = {"Map", "Log" , "Settings"};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);

    fragmentManager = getFragmentManager();

    viewPage = (ViewPager) findViewById(R.id.pager);
    actionBar = getActionBar();
    myAdapter = new TabAdapter(getSupportFragmentManager());

    viewPage.setAdapter(myAdapter);
    actionBar.setHomeButtonEnabled(false);
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    // Adding Tabs
    for (String tab_name : tabNames) {
        actionBar.addTab(actionBar.newTab().setText(tab_name)
                .setTabListener(this));
    }

    viewPage.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) {
        }
    });

}

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

@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {

}

@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
    viewPage.setCurrentItem(tab.getPosition());
}
}

初始 View :

Initial View of Tab

重新选择 map 选项卡后的实际结果:

Upon Reselecting Maps Tab

预期结果:

What should actually happen


我知道在 TabAdapter 文件中,每次调用 getPosition 时我们都会创建新实例,所以这可能是问题所在。

任何帮助将不胜感激!

最佳答案

您好,请尝试设置您的 PageViewer 方法 setOffscreenPageLimit()

viewPage.setOffscreenPageLimit(3);

关于android - fragment 在初始选项卡选择上重新初始化内容 - ANDROID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31806420/

相关文章:

Android - 从 TabHost/TabWidget 中删除图标

java - 如何将 Android Navigation Architecture fragment 动画化为滑过旧 fragment ?

visual-studio - 如何在 Visual Studio 中移动 "Solution Explorer"选项卡

android - 加载 fragment 时出现空指针异常

android - 使用 fragment 时不显示选项卡内容

android - "react-native start"有效,但在 "react-native run-android"正在进行时崩溃,即使在新项目上也是如此(裸工作流)

java - 安装Android SDK时选择哪个Android平台?

android - 无法使用 Eclipse 创建新的 Android 项目

android - Dagger2 在 fragment 演示器中获取 Activity 演示器的实例