2014-07-10 8 views
0

프래그먼트 개수를 프로그래밍 방식으로 생성합니다. 이들 모두는 서로 다른 레이아웃을 가지고 있으며, 조각 사이를 스왑 한 후에 활성 조각의 레이아웃이 변경됩니다.응용 프로그램 시작시 모든 조각을 만드는 방법

프로그램이 시작될 때 FragmentPagerAdapter은 처음 두 조각을 만듭니다. 마지막 조각 (예 : 첫 번째부터 일곱 번째까지)을 선택하면 FragmentPagerAdapter은 일곱 번째 fargment와 여섯 번째 조각을 만들기 시작합니다. 이 시점에서 아래 코드를 사용하여 현재 조각을 선택하고 싶습니다. 나는 7 조각을 선택해야하고 그러나 나는 이러한 1 - 2 - 6 - 7입니다 만든 네 개의 조각이 인덱스는 6 있기 때문에 사실

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

myViewPager.getCurrentItem() 반환 6.. 따라서 getFragments() 메서드는이 4 가지 fargments를 반환하며 반환되는 값 때문에 현재 활성 단편을 선택할 수 없습니다. myViewPager.getCurrentItem()

아플리케 션을 시작할 때 모든 조각을 만들 수있는 방법이 있습니까? 다른 조각을 만들기 전에 현재 조각을 만드시겠습니까?

답변

2

뷰 페이지의 조각 수를 offscreenpagelimit으로 설정할 수 있습니다.

viewpager.offscreenpagelimit(6); 
+0

같은 다른 조각에 의해 하나 개의 조각을 대체 할 수있는! –

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); 
    } 
} 
I 공개 단편 어레이를 생성하고,이 배열의 생성 단편 그때 등이 배열에서 현재의 단편 불렀다 저장된

: 또한 그것은 수있다

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

화면에 보이는 조각을 찾으십시오. 나중에 코드를 공유 할 것입니다.

내 quesntion에 시간을 보내 주신 모든 분들께 감사드립니다.

0

당신이 가장 좋은 방법해야 다음

DiplayFragment newFragment = new DiplayFragment(); 

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