如何在应用程序启动时创建所有片段

时间:2014-07-10 07:11:01

标签: android android-fragments

我正在以编程方式创建多个片段。所有这些都具有不同的布局,并且在片段之间交换后,活动片段的布局会发生变化。

程序启动时FragmentPagerAdapter创建前两个片段。如果我选择最后一个片段(例如第一个到第七个),FragmentPagerAdapter开始创建第七个片段,然后是第六个片段。此时我想使用下面的代码选择当前片段。

`(FragmentMasaDesign) getSupportFragmentManager().getFragments().get
                                (myViewPager.getCurrentItem());`

myViewPager.getCurrentItem()返回6.这是真的,因为我选择了第7个片段,其索引是6.但是我只有4个片段被创建,这些片段是1st-2nd-6th-7th。因此getFragments()方法返回这四个fargments,并且由于myViewPager.getCurrentItem()

返回的值,它无法选择当前活动片段

有没有办法在应用程序启动时创建所有片段,或者如何在创建其他片段之前获取当前片段?

3 个答案:

答案 0 :(得分:4)

您可以使用offscreenpagelimit设置viewpager上的片段数。

viewpager.offscreenpagelimit(6);

答案 1 :(得分:0)

public class CollectionPagerAdapter extends FragmentPagerAdapter {
    public ArrayList<Departman> lstDepartmanlar;
    public ArrayList<MasaDizayn> lstMasaDizayn;
    ArrayList<String> masaIsimleri;
    public String[] masaPlanIsmi;
    Fragment fragment;
    public Fragment[] fragments = null;

    public static FragmentMasaDesign newInstance(ArrayList<String> masalar, String DepartmanAdi) {
        FragmentMasaDesign myFragment = new FragmentMasaDesign();
        Bundle args = new Bundle();
        args.putStringArrayList("masalar", masalar);
        args.putString("departmanAdi", DepartmanAdi);
        myFragment.setArguments(args);
        return myFragment;
    }

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

    @Override
    public Fragment getItem(int i) {
        fragment = null;
        if (fragments == null)
            fragments = new Fragment[lstDepartmanlar.size()];
        for (int j = 0; j < lstDepartmanlar.size(); j++) {
            if (i == j) {
                for (Departman departman : lstDepartmanlar) {
                    if (departman.DepartmanEkrani.contentEquals(masaPlanIsmi[i])) {
                        masaIsimleri = new ArrayList<String>();
                        for (MasaDizayn masaDizayn : lstMasaDizayn) {
                            if (masaDizayn.MasaPlanAdi.contentEquals(departman.DepartmanEkrani)) {
                                masaIsimleri.add(masaDizayn.MasaAdi);
                            }
                        }
                    }
                }
                fragment = newInstance(masaIsimleri, lstDepartmanlar.get(i).DepartmanAdi);
            }
        }
        fragments[i] = fragment;
        return fragment;
    }

    @Override
    public int getCount() {
        return lstDepartmanlar.size();
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return "OBJECT " + (position + 1);
    }
}

我创建了一个公共片段数组,然后将创建的片段存储在这个数组中,然后我从这个数组中调用了当前片段,如:

   public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
        mViewPager.setCurrentItem(tab.getPosition());
        fragment = collectionPagerAdapter.fragments[mViewPager.getCurrentItem()];
    }

还可以在屏幕上找到可见片段。我稍后会分享它的代码。

感谢所有花时间回答问题的人。

答案 2 :(得分:0)

您可以将一个片段替换为另一个片段,如下所示

DiplayFragment newFragment = new DiplayFragment();

                                    FragmentTransaction transaction = getSupportFragmentManager()
                                            .beginTransaction();
                                    transaction
                                            .replace(R.id.nav_fl_frag_container, newFragment);
                                    transaction.addToBackStack(null);
                                    transaction.commit();