2017-04-20 11 views
0

FragmentStatePagerAdapter을 사용하고 있습니다. getItem(int position)은 잘못된 위치를 반환합니다. 나는 5 조각이있다.FragmentStatePagerAdapter가 getItem에서 잘못된 위치를 반환합니다.

다음
Fragment0 -> Fragment1: position = 2 
Fragment1 -> Fragment2: position = 3 
Fragment2 -> Fragment3: position = 4 
Fragment3 -> Fragment4: getItem is not called! 
Fragment4 -> Fragment3: position = 2 
Fragment3 -> Fragment2: position = 1 
Fragment2 -> Fragment1: position = 0 
Fragment1 -> Fragment0: getItem is not called! 

내 어댑터에 대한 코드입니다 :

import android.content.Context; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentStatePagerAdapter; 

public class AppFragmentPageAdapter extends FragmentStatePagerAdapter { 
    final int PAGE_COUNT = 5; 
    private String tabTitles[] = new String[] { "اخبار", "حقیقت‌سنج", "ویدیوها", "زندگی‌نامه", "برنامه‌ها" }; 
    private Context context; 

    public AppFragmentPageAdapter(FragmentManager fm, Context context) { 
     super(fm); 
     this.context = context; 
    } 

    @Override 
    public int getCount() { 
     return PAGE_COUNT; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     switch (position) { 
      case (0): 
       return NewsFragment.newInstance(position); 
      default: 
       return VideosFragment.newInstance(position); 
     } 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return tabTitles[position]; 
    } 
} 
+0

'Fragment0 -> Fragment1 : position = 2'이 무슨 뜻인지 이해할 수 없습니다. 이 출력은 logcat에 있습니까? 그렇다면이 출력물을 만드는 코드를 보여주고 다른 것으로 예상되는 것을 설명하십시오. –

+0

표시된 코드는 두 조각을 만듭니다. 당신이 묻고있는 전반적인 개념을 여전히 보여줄 수있는 한 괜찮습니다. –

답변

3

그것은 정상적인 동작입니다 내가 조각을 변경할 때의 위치입니다. 기본적으로 FragmentStatePagerAdapter는 현재 표시된 조각과 이웃에 대한 링크를 유지합니다. 처음에는 어댑터가 Fragment0 및 Fragment1을 만듭니다. Fragment1로 스 와이프하면 Fragment2를 만들고 이에 대한 getItem (2)을 호출합니다. Fragment2로 스 와이프 한 후 어댑터는 Fragment0을 삭제하고 Fragment3을 만듭니다.