片段在初始选项卡选择上重新初始化内容 - ANDROID
Fragments Re-Initializing content on Initial tab selection - ANDROID
我有一个应用程序正在使用充当 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());
}
}
初始视图:
重新选择地图选项卡后的实际结果:
预期结果:
我知道在 TabAdapter 文件中,每次调用 getPosition 时我们都会创建新实例,所以这可能是问题所在。
任何帮助将不胜感激!
您好尝试设置 PageViewer 的方法 setOffscreenPageLimit()
viewPage.setOffscreenPageLimit(3);
我有一个应用程序正在使用充当 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());
}
}
初始视图:
重新选择地图选项卡后的实际结果:
预期结果:
我知道在 TabAdapter 文件中,每次调用 getPosition 时我们都会创建新实例,所以这可能是问题所在。
任何帮助将不胜感激!
您好尝试设置 PageViewer 的方法 setOffscreenPageLimit()
viewPage.setOffscreenPageLimit(3);