Android 第二次滑动卡舌无法正确加载
我使用谷歌SlidingTabLayout和SlidingTabStrip.in片段。 该片段包含2个其他片段,一个具有映射视图,另一个具有列表视图。 如果我第一次从导航抽屉中调用此片段(打开应用程序),它将正确显示带有2个选项卡的片段 但是当我试图通过导航抽屉或后退按钮返回时,片段没有加载任何内容,只有像slidinglayout这样的灰色背景没有正确加载 有人能指出我做错了什么吗 StoreTabHostFragment.javaAndroid 第二次滑动卡舌无法正确加载,android,google-maps,pagerslidingtabstrip,Android,Google Maps,Pagerslidingtabstrip,我使用谷歌SlidingTabLayout和SlidingTabStrip.in片段。 该片段包含2个其他片段,一个具有映射视图,另一个具有列表视图。 如果我第一次从导航抽屉中调用此片段(打开应用程序),它将正确显示带有2个选项卡的片段 但是当我试图通过导航抽屉或后退按钮返回时,片段没有加载任何内容,只有像slidinglayout这样的灰色背景没有正确加载 有人能指出我做错了什么吗 StoreTabHostFragment.java public class StoreTabHostFragm
public class StoreTabHostFragment extends Fragment {
private ViewPager viewPager;
private StoresPagerAdapter mAdapter;
private SlidingTabLayout tabLayout;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_stores, container, false);
viewPager = (ViewPager) rootView.findViewById(R.id.pager);
mAdapter = new StoresPagerAdapter(getActivity().getSupportFragmentManager(), getActivity());
viewPager.setAdapter(mAdapter);
tabLayout = (SlidingTabLayout) rootView.findViewById(R.id.sliding_tabs);
tabLayout.setDistributeEvenly(true);
tabLayout.setViewPager(viewPager);
return rootView;
}
}
StoreMapFragment.java(省略了一些函数)
StorePagerAdapter.java
public class StoresPagerAdapter extends FragmentPagerAdapter {
private static int FRAGMENT_NUMBER = 2;
private Context context;
private String tabTitles[] = new String[] {"Mapa", "Sucursales"};
public StoresPagerAdapter(FragmentManager fm, Context context){
super(fm);
this.context = context;
}
@Override
public Fragment getItem(int index){
switch(index){
case 0:
return new StoreMapFragment();
case 1:
return new StoreListFragment();
}
return null;
}
@Override
public int getCount() {
// get item count - equal to number of tabs
return FRAGMENT_NUMBER;
}
@Override
public CharSequence getPageTitle(int position){
return tabTitles[position];
}
}
使用FragmentStatePagerAdapter而不是使用FragmentPagerAdapter将解决此问题
FragmentPagerAdapter
当在表示固定、少量页面的同级屏幕之间导航时,这是最好的
FragmentStatePagerAdapter
这最适合在页面数量不确定的对象集合中进行分页。它会在用户导航到其他页面时销毁片段,从而最大限度地减少内存使用
要解决您的问题,请使用FragmentStatePagerAdapter
public class StoresPagerAdapter extends FragmentPagerAdapter {
private static int FRAGMENT_NUMBER = 2;
private Context context;
private String tabTitles[] = new String[] {"Mapa", "Sucursales"};
public StoresPagerAdapter(FragmentManager fm, Context context){
super(fm);
this.context = context;
}
@Override
public Fragment getItem(int index){
switch(index){
case 0:
return new StoreMapFragment();
case 1:
return new StoreListFragment();
}
return null;
}
@Override
public int getCount() {
// get item count - equal to number of tabs
return FRAGMENT_NUMBER;
}
@Override
public CharSequence getPageTitle(int position){
return tabTitles[position];
}
}