4

나는 Navigating back to FragmentPagerAdapter -> fragments are empty과 같은 문제가 있지만 getChildFragmentManager()를 사용하여 솔루션에 대한 설명을 원합니다.getChildFragmentManager() 및 viewpager

이 솔루션은이 조각 (뷰어가있는 OuterFragment) 내의 조각에 대한 관리자 인 getChildFragmentManager()를 사용합니다. InnerFragment는 OuterFragment 내부 페이지입니다. 누군가가 InnerFragment에서리스트 뷰를 클릭하면 InnerFragment2를 InnerFragment를 대체하기를 원합니다. XML과 조각 관리자는 어떻게 생겼습니까?

fragment_outer.xml :

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.view.ViewPager 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/vpPager" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent"> 

    <android.support.v4.view.PagerTabStrip 
     android:id="@+id/pager_header" 
     android:layout_gravity="top" 
     android:layout_height="wrap_content" 
     android:layout_width="match_parent" 
     android:paddingBottom="4dp" 
     android:paddingTop="4dp" /> 

    <FrameLayout 
     android:id="@+id/inner_content" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</android.support.v4.view.ViewPager> 

OuterFragment.java :

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

View v = inflater.inflate(R.layout.fragment_outer, container, false); 
vpPager = (ViewPager) v.findViewById(R.id.vpPager); 

FragmentManager cfManager = getChildFragmentManager(); 
adapterViewPager = new MyPagerAdapter(cfManager); 

vpPager.setAdapter(adapterViewPager); 
return v; 
} 

public static class MyPagerAdapter extends FragmentPagerAdapter { 

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

@Override 
public int getCount() { 
    return 2; 
} 

// Returns the fragment to display for that page 
@Override 
public Fragment getItem(int position) { 
    switch (position) { 
     case 0: 
      return InnerFragment.newInstance(false); 
     case 1: 
      return InnerFragment.newInstance(true); 
     default: 
      return null; 
    } 
} 

InnerFragment가 viewpager을 갖는다 OuterFragment 내부 단편으로서 나타난다. InnerFragment에는 클릭하면 InnerFragment를 InnerFragment2로 바꿔야하는 목록 뷰가 있습니다.

InnerFragment.java :

FragmentManager fm = getChildFragmentManager(); 
fm = fm.beginTransaction(); 
ft.addToBackStack(null); 
ft = ft.replace(R.id.inner_content, 
       InnerFragment2.newInstance(someArg)); 
ft.commit(); 

이 InnerFragment2가 R.id.inner_content을 볼 인식하지 않는 없다는 오류가 발생합니다.

InnerFragment2가 InnerFragment를 대체해야 할뿐만 아니라 InnerFragment2가 표시되고 단추가 클릭 될 때 InnerFragment2가 InnerFragment3으로 바뀌길 바랍니다. 기본적으로 내부 컨테이너로 inner_content를 사용하고 백스 페이스에 적절한 백 동작을 위해 조각을 계속 추가하려고합니다.

내 조각 백 스테이지에 추가 할 때마다 getChildFragmentManager() 또는 getFragmentManager()를 수행합니다. 내 outerfragment에 하나의 framelayout이 없기 때문에 xml 패턴이 어떻게 생겼는지 알 수 있습니다.

답변

0
public void setupViewPager(ViewPager viewPager) { 

    FragmentManager cfManager=getChildFragmentManager(); 
    viewPagerAdapter = new ViewPagerAdapter(cfManager); 

    // viewPagerAdapter = new ViewPagerAdapter(getActivity().getSupportFragmentManager()); 
    viewPagerAdapter.addFragment(new EntertainmentWallpaperFragment(), getString(R.string.title_entertainment_wallpapers)); 
    viewPagerAdapter.addFragment(new EntertainmentMusicFragment(), getString(R.string.title_entertainment_music)); 
    viewPagerAdapter.addFragment(new EntertainmentGamesFragment(), getString(R.string.title_entertainment_games)); 
    viewPagerAdapter.addFragment(new EntertainmentEBooksFragment(), getString(R.string.title_entertainment_ebooks)); 
    viewPagerAdapter.addFragment(new EntertainmentAppsFragment(), getString(R.string.title_entertainment_apps)); 
    viewPager.setAdapter(viewPagerAdapter); 
} 

이 정보가 도움이되기를 바랍니다. 나는 파편이 찢어지는 것과 같은 문제를 가지고있었습니다. 그러나 일단 당신이 다시 되돌아 가면 그들은 사라지고 텅 빈 향기를 찾습니다. 조각 관리자를 업데이트 한 후 자유롭게 부드러운 스크롤을 즐길 수있는 처음 구현 한 라인을 Commnented했습니다.