2017-04-20 6 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

表示されているコードは、2つのフラグメントのみを作成します。あなたが依頼している全体的な概念をまだ説明できる限り、これは問題ありません。 –

答えて

3

それは正常な動作です。デフォルトでは、FragmentStatePagerAdapterは現在表示されているフラグメントとその近傍のリンクを保持します。最初にアダプターがFragment0とFragment1を作成します。あなたはFragment1にスワイプすると、Fragment2を作成し、getItem(2)を呼び出します。 Fragment2にスワイプした後、アダプタはFragment0を破棄してFragment3を作成します。

関連する問題