Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 第二次滑动卡舌无法正确加载_Android_Google Maps_Pagerslidingtabstrip - Fatal编程技术网

Android 第二次滑动卡舌无法正确加载

Android 第二次滑动卡舌无法正确加载,android,google-maps,pagerslidingtabstrip,Android,Google Maps,Pagerslidingtabstrip,我使用谷歌SlidingTabLayout和SlidingTabStrip.in片段。 该片段包含2个其他片段,一个具有映射视图,另一个具有列表视图。 如果我第一次从导航抽屉中调用此片段(打开应用程序),它将正确显示带有2个选项卡的片段 但是当我试图通过导航抽屉或后退按钮返回时,片段没有加载任何内容,只有像slidinglayout这样的灰色背景没有正确加载 有人能指出我做错了什么吗 StoreTabHostFragment.java public class StoreTabHostFragm

我使用谷歌SlidingTabLayout和SlidingTabStrip.in片段。 该片段包含2个其他片段,一个具有映射视图,另一个具有列表视图。 如果我第一次从导航抽屉中调用此片段(打开应用程序),它将正确显示带有2个选项卡的片段

但是当我试图通过导航抽屉或后退按钮返回时,片段没有加载任何内容,只有像slidinglayout这样的灰色背景没有正确加载

有人能指出我做错了什么吗

StoreTabHostFragment.java

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];
    }

}