2011-10-26 4 views
5

에 나는 조각을 제공하기 위해 내부 목록을 사용하는 사용자 지정 PagerFragmentAdapterViewPager을 사용하고 있습니다. 나는 설정 변경시 조각을 동적으로 추가 및 제거하려고합니다.추가 및 제거 조각 동적 ViewPager

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.fragment_pager); 
    mAdapter = new ServicePagerAdapter(getSupportFragmentManager()); 
    mPager = (ViewPager) findViewById(R.id.pager); 
    mPager.setAdapter(mAdapter); 
} 

나는 다시 setAdapter 전화를 시도했지만 나는 IllegalStateException (Can not perform this action after onSaveInstanceState)을 구하십시오.

어떻게 내 목적을 달성 할 수 있습니까?

답변

2

당신은 당신의 ServicePagerAdapter 모든 시간을 재설정 할 필요가 없습니다. 그것은 생성의 onCreate() 방법으로 한 번 설정 충분 당신의 Activity을 (또는 onActivityCreated() 당신의 Fragment의 방법) 다음은 단순히 새로운 요소를 추가 어댑터의 add() 메서드를 호출 할 수 있습니다. 그러나 어댑터를 추가 할 때마다 notifyDataSetChanged() 번으로 전화하는 것을 잊지 마십시오.

+0

불행히도 그렇게 쉽지는 않습니다. FragmentPagerAdapter는 Fragments를 캐시합니다. 사용자 정의 PagerAdapter를 만들거나 트릭을 사용해야합니다. – Matroska

+0

코드 샘플에서'ServicePagerAdapter'라고 언급합니다. 이것은 라이브러리 클래스가 아니므로 이미 사용자 정의 어댑터를 사용하고 있다고 가정했습니다. 그래서 네,'PagerAdapter' 클래스의 커스텀 구현이 필요합니다. 당신의 주된 질문에 관해서 - 나는 대답했다고 생각합니다. – HitOdessit

+2

요소가 제거 된 경우 PagerAdapter에서 notifyDataSetChanged()를 호출하는 것으로는 충분하지 않습니다. PagerAdapter의 getItemPosition 메소드도 대체해야합니다. 요소가 아직 있으면 POSITION_UNCHANGED를 반환하고 제거 된 경우 POSITION_NONE을 반환합니다. –