나는 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 패턴이 어떻게 생겼는지 알 수 있습니다.