2012-03-07 2 views
5

viewPager에 몇 페이지 (조각)가 있습니다. 나는이 같은, (예를 들어) 첫 번째를 제거하려
는 :조각의 태그를 변경할 수 없습니다.

mFragmentManager.beginTransaction().remove(Page1).commit(); 

내가 왜 모르는

IllegalStateException has occured. 

말한다. 아무도 나를 도울 수 있습니까? 감사.

예외 :

java.lang.IllegalStateException: Can't change tag of fragment Page2{40586418 #2 id=0x7f080006 android:switcher:2131230726:2}: was android:switcher:2131230726:2 now android:switcher:2131230726:1 
+0

[Android : 하나의 조각을 다른 조각으로 바꿀 수 없음] (http://stackoverflow.com/questions/5907673/android-cant-replace-one-fragment-with-another) – bernie

+0

예외 추적이 도움이 될 것입니다. . ViewPager.setCurrentItem (int)에서도 같은 일이 일어나고 있습니다. –

+0

ViewPager에서 단편을 제거하면 무엇을 의미합니까? ViewPager는 Fragment의 수명을 관리합니다.어댑터의 메소드를 사용하여 listview에서 제거하는 것과 같은 것을 제거해야합니다. 좀 더 명확히 해 주시겠습니까? –

답변

2

이 오래된 질문이지만, 어쨌든 여기가 사람을 도움이 될 것입니다 희망에 대한 몇 가지 정보를 제공합니다.

ViewPager는 ViewPager # setAdapter()를 통해 설정된 어댑터와 함께 작동합니다. 이 질문의 경우 FragmentPagerAdapter가 어댑터로 사용 된 것 같습니다 (이 어댑터는 예외에 나타나는대로 android : switcher : [x] : [y] 조각에 이름을 지정하기 때문에). FragmentPagerAdapter에 대한

한 가지 중요한 관찰은 이것이다 :

FragmentPagerAdapter은 ViewPager에서 사용되는 할당 조각을 소유하고있다.

public abstract Fragment getItem(int position); 

이 기능 페이지로 ViewPager에서 사용하는 다른 단편을 만들고 다음과 같이

ViewPagerAdapter의 연계와 ViewPager의 사용자는 프로토 타입, FragmentPagerAdapter는 준 getItem() 메소드를 구현하는 서브 클래스를 정의하는 . 이 메소드의 구현은 프래그먼트를 할당하기 위해 FragmentPagerAdapter()에 서브 클래스가 제공하는 서비스로 간주되어야합니다.

즉, 하위 클래스는 조각을 할당하지만 그것은 소유자가 아닙니다.

위와 같이 프래그먼트의 소유자가 FragmentPagerAdapter이므로 모든 조각 작업 (FragmentManager/FragmentTransaction의 의미에서)은 FragmentPagerAdapter에 의해서만 수행되어야합니다.

이러한 조각에 대한 작업을 시도하면 ViewPager의 정상적인 작동을 방해하고 정의되지 않은 동작이 발생할 수 있습니다.

이 질문의 경우 FragmentPagerAdapter 외부의 ViewPager에서 사용되는 조각 중 하나를 제거하려고 시도했습니다. 설명 된대로이 예외로 끝난 시퀀스가 ​​잘못되었을 수 있습니다.

ViewPager에서 페이지를 동적으로 제거/추가/바꾸기 위해 어댑터에서 notifyDataSetChanged()를 호출하는 방법.

행운을 빈다.

관련 문제