8

Fragment MyFragment에서 ViewPager이 있고 Fragment이 더 있습니다. 처음 MyFragment를로드 할 때 제대로 작동하지만 다시 돌아와 다시 작성하면 FragmentPagerAdapter.getItem 메서드가 호출되지 않기 때문에 ViewPager에있는 Fragments이 표시되지 않습니다.포함하는 조각을 다시 만들 때 ViewPager의 조각이로드되지 않았습니다.

사용하고 있습니다.

무엇이 잘못 되었습니까?

import android.app.Fragment; 
import android.app.FragmentManager; 
import android.support.v13.app.FragmentPagerAdapter; 
import android.support.v4.view.ViewPager; 
... 

public class MyFragment extends Fragment { 

    private ViewPager pager; 
    private MyPagerAdapter adapter; 

    private List<Fragment> fragmentList = new ArrayList<Fragment>(); 

    public MyFragment() {} 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.my_fragment_layout, container, false); 
    } 

    public void onViewCreated(View v, Bundle savedInstanceState) { 
     super.onViewCreated(v, savedInstanceState); 

     indicators = (PagerSlidingIndicator) v.findViewById(R.id.indicators); 
     pager = (ViewPager) v.findViewById(R.id.pager); 

     Fragment fragment1 = new Fragment1(); 
     fragmentList.add(fragment1); 

     Fragment fragment2 = new Fragment2(); 
     fragmentList.add(fragment2); 

     Fragment fragment3 = new Fragment3(); 
     fragmentList.add(fragment3); 

     adapter = new IndicatorPagerAdapter(getFragmentManager()); 
     pager.setAdapter(adapter); 
    } 

    public class MyPagerAdapter extends FragmentPagerAdapter { 

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

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

     @Override 
     public Fragment getItem(int position) { 
      return fragmentList.get(position); 
     } 
    } 
} 

답변

22

중첩 된 조각을 사용하는 경우, 당신은 당신의 FragmentPagerAdapter을 설정할 때 getChildFragmentManager()하지 getFragmentManager()를 사용해야합니다 ("나는 조각 MyFragment VITH 더 조각이 포함 된 ViewPager가있다").

+0

getChildFragmentManager() : 호출에 API 수준 17이 필요하며 최소 = 15입니다. 그래서 유일한 방법은'Fragment' 지원을 사용하는 것입니다. 맞습니까? – jul

+0

예, 슬픈 사실은 지원 조각으로 모든 조각을 대체해야한다는 것입니다. getChildFragmentManager()를 사용할 수있게하려면 – jul

+0

@jul : 네, 중첩 된 조각의 개념은 API 레벨 17의 조각의 기본 구현에만 추가되었습니다. 당신의 대안은'ViewPager'가 프래그먼트 내에 있지 않거나'ViewPager'의 페이지로서 프래그먼트를 가지지 않을 것입니다. – CommonsWare