2012-11-07 5 views
0

뷰가 10 개 이상인 ViewPager가 있습니다. 예 : 페이지 순서를 변경하고 싶습니다. 예 :ViewPager 및 업데이트보기의 순서 변경

Page 1 | Page 2 | 3 페이지

to

Page 3 | Page 1 | 2 페이지 내가 ViewPagerIndicator을 사용하고있는 탭에 대한

, 내 어댑터의 순서를 변경하고 호출하여 이들의 순서를 업데이트 할 수 있어요 :

mViewPagerIndicator.notifyDataSetChanged(); 

을하지만, 내가 무엇을 업데이트 할 수 없습니다하는 내용입니다 ViewPager 예를 들어 나는 및 전화 (나는 페이지가 될하고자하는 새로운 순서)에 ViewPager 어댑터를 업데이트 할 경우 :

mViewPager.getAdapter().notifyDataSetChanged() 

이는 효과가 없습니다. 탭 표시 줄은 잘 업데이트되지만 페이지의 내용에는 이전 순서가 계속 표시됩니다.

ViewPager 어댑터에서 페이지 순서를 변경하고 ViewPager에서 모든 뷰를 다시로드하는 방법이 있습니까?


내 ViewPager 어댑터가 FragmentStatePagerAdapter 확장하고 다음과 같이 내 오버라이드 (override) 방법은 다음과 같습니다, 그것은 당신이 논리를 직접 구현해야하기 때문에 FragmentStatePagerAdapter와 함께 할 까다로운

답변

1

@Override 
public Fragment getItem(int position) { 
    return MyCustomFragment.newInstance(); 
} 
@Override 
public void destroyItem(ViewGroup container, int position, Object object) { 
    //super.destroyItem(container, position, object); // Commented out to ensure views are not destroyed 
} 

감사하지만, 이 목적을 위해 이미 기능을 제공하는 FragmentPagerAdapter을 사용하는 것이 훨씬 쉽습니다.

.notifyDataSetChanged()을 호출하면 어댑터의 getItemPosition(Object object) -method가 호출됩니다. 여기에서 ViewPager에 Fragment가 위치 할 페이지 번호를 반환하여 object 매개 변수로 전달 된 Fragment를 넣을 위치의 정보를 제공해야합니다.

이 작업을 수행하는 방법에 대한 예는 check out my answer here입니다.

0

성능이 매우 중요하지 않은 경우, 그것은 FragmentStatePagerAdapter 또는 FragmentPagerAdapter가 다시 그릴 (무효화)를 강제 견해/조각 모두 정말 쉽습니다 : 단지 getItemPosition을 무시하고 평소처럼 notifyDataSetChanged()를 호출합니다.

@Override 
public int getItemPosition(Object object) { 
    return POSITION_NONE; //In source code, POSITION_NONE = -2 FYI 
} 

더 많은 정보를 위해, 내 게시물을 체크 아웃 : How to use orderByKey() in descending order instead of ascending #Askfirebase