아래 코드는 단순화되어 관련 항목 만 표시됩니다.동적으로 추가 된 조각 정리
나는 레이아웃 XML 파일에 있습니다
<LinearLayout
android:id="@+id/top_row"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"/>
이 레이아웃은 Fragment
ViewPager
A의 우리가 동적으로 자식 조각을 추가 할 Fragment
의 onCreateView()
에서는 FragmentStatePagerAdapter
을 사용하여 팽창, 모든 종류의 숫자가 될 수 있습니다. 이렇게하면 :
View view = inflater.inflate(R.layout.the_layout, container, false);
FragmentManager fragmentManager = getChildFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
for(Fragment f : fragments) {
transaction.add(R.id.top_row, frag);
}
transaction.commit();
완벽하게 작동하여 모든 조각이 서로 잘 정렬됩니다.
여기에 문제가 있습니다. Activity
의 onCreate가 다시 호출 될 때마다 ViewPager
이 새 Adapter
으로 설정됩니다. 그래서 나는 모든 것이 다시 재건되기를 기대합니다. 따라서 onCreateView
이 호출되므로 새 View
이 생성되고 Fragments
이 새로 추가됩니다. LinearLayout
.
실제로 발생하는 것은 이전 Fragments
이 여전히 존재하는 것입니다. 새로운 Fragments
은 이전에 추가 된 Fragments
에 추가됩니다. 그럼 onCreateView()
가 3 번 호출 한 후 내가 가진, 3 Fragments
가있는 가정 해 봅시다 9.
내가 무슨 일이 일어나고 있는지 생각하십시오 Fragments
가 View
와 ID에 의해 연결되어 있습니다, 그래서 그들은 새로운 View
에 추가됩니다 너무. 내가해야 할 일 : onDestroyView()
에있는 모든 Fragments
을 제거하십시오. 그러나 허용되지 않습니다 ('onSaveInstanceState()
이후에는 수행 할 수 없습니다. onPause()
에서 충돌이 발생합니다).
이런 식으로해서는 안되는 것이 있습니까? FrameLayout
과 함께 레이아웃을 사용해야하며 여기에 FragmentTransaction.replace()
을 사용해야합니까?
내 Activity
에는 onCreate()
을 제외한 다른 기능이 구현되어 있지 않습니다. 여기 어댑터를 인스턴스화하고 ViewPager
FragmentStatePagerAdapter
자체를 설정하는 순간 매우 간단합니다, getItem()
은 특정 Fragment
반환
return new MyFragment();
[Android 설명서] (https : //developer.a)에 따르면 ndroid.com/guide/components/fragments.html#Lifecycle), 단편은 부모 활동보다 오래 살아갈 수 없습니다. 귀하의 활동이 onCreate() 및 onStart()를 올바르게 구현하는지 확인해야합니다. 여기에 코드를 붙여 넣으십시오. 나는 onStop() 중에 조각을 제거하고, onStart() 중에 조각을 추가한다고 말하고 싶다. –
은 'java.lang.IllegalStateException :'transaction.commit() '에서 onSaveInstanceState 이후에이 작업을 수행 할 수 없습니다. – Boy
활동 라이프 사이클에서 더 많은 코드를 표시하지 않으면 힌트를 제공하기 어렵습니다. 또는 onSaveInstanceState()를 오버라이드하고이 메서드에서 중단 점을 설정하여 호출 시점과 파편 상태를 확인할 수 있습니다. –