2014-10-22 1 views
1

이렇게하면 두통이 생깁니다. 내 애플 리케이션은 ViewPager 4 탭이 포함되어 있다고하자. 각 탭 내에 여러 하위 조각이 있어야합니다. 즉, 각 탭에는 하나 이상의보기가 있습니다. 난 완전히 각 탭에 여러 개의 하위 단편이있는 android-viewpager

내가 내 ViewPager

public class FragActivity extends FragmentActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.frag_main); 

     ViewPager pager = (ViewPager) findViewById(R.id.pager); 
     PagerAdapter adapter = new FFNPagerAdapter(getSupportFragmentManager()); 

     pager.setAdapter(adapter); 
     pager.setOffscreenPageLimit(3); 
     tabs.setViewPager(pager); 
    } 
} 

그때가 처음로드 설정 얻는 FragmentActivity이 .... 어떻게 이것을 달성하는 단서가 없다 내 FragmentPagerAdapter

public class PagerAdapter extends FragmentPagerAdapter implements TextAndIconTabProvider { 
    private final String[] TITLES = { "FIRST", "SECOND", "THIRD", "FORTH" }; 

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

    @Override 
    public Fragment getItem(int position) { 
     Fragment frag = new Fragment(); 
     switch (position) { 
     case 1: 
      frag = new FirstFrag(); 
      break; 
     case 2: 
      frag = new SecondFrag(); 
      break; 
     case 3: 
      frag = new ThirdFrag(); 
      break; 
     case 4: 
      frag = new ForthFrag(); 
      break; 

     } 

     return frag; 
    } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return TITLES.length; 
    } 
} 

위를 나에게 ViewPager의 4 개의 활성 탭이있는 작업을 제공합니다. 그런 다음 4 개의 개별 단편을 모두해야합니다. 나는 아래에 하나의 예를 든다.

public class FirstFrag extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     return inflater.inflate(R.layout.firstfrag, container, false); 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onActivityCreated(savedInstanceState); 

     Button btn1 = (Button) getActivity().findViewById(R.id.btn1); 
     btn1.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       // what should I put in this block?????? 
       Fragment fragment = new FirstFragSub1(); 
       FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
       transaction.replace(R.id.pager, fragment); //<<------what should i replace??????? 
       transaction.commitAllowingStateLoss(); 
      } 
     }); 
    } 
} 

FirstFragSub1OnCreateView 불려갑니다하지만 화면에 표시 아무것도 표시되지 않습니다. 기본적으로 공백입니다. 나는 올바른 방법으로해서는 안되는 R.id.pager을 대체함으로써 알았습니다. 저는 초기 생각이 무엇인지 예를 든 것뿐입니다. 여기

내이 FirstFragSub1

public class FirstFragSub1 extends ListFragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     Log.i("FirstFragSub1","onCreateView is called"); 
     return inflater.inflate(R.layout.subone, container, false); 
    } 
} 

누군가가 저를 도와 주실 수 있습니까? 나는 정말로 생각에서 ... 감사합니다

답변

0

조각에 의해 팽창중인 뷰에 FrameLayouts가 있습니다. 그리고 onCreateView는 FrameLayout을 원하는 하위 조각으로 대체합니다.

또한 Activity의 FragmentManager를 사용하지 않도록주의하십시오. getFragmentManager는 Activity의 FragmentManager를 반환하므로 바람직하지 않은 결과가 발생합니다 (ViewPager 내부의 단 하나의 조각에만 하위 조각이로드 됨). 대신 getChildFragmentManager 함수를 사용하십시오.

관련 문제