2017-01-15 10 views
0

ViewPagerと3つのフラグメントを使用してプログラムを作成しました。私の問題は次のとおりです。ViewPagerでFragmentPagerAdapterを使用した3つのフラグメント

アクティビティが最初に作成されると、2つのフラグメントが呼び出されます。フラグメント1から2に行く間に、フラグメント2がクリックまたはスクロールされると、フラグメント3のnewInstance()メソッドが呼び出されます。そして、フラグメント3からフラグメント2にフラグメント1に戻ると、onCreateView()メソッドが呼び出されます。

マイコード:

ViewPagerAdapter.java

public class ViewPagerAdapter extends FragmentPagerAdapter { 

private static int NUM_ITEMS = 3; 
Context context; 

public ViewPagerAdapter(FragmentManager manager,Context context) { 
    super(manager); 
    this.context = context; 
} 

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

// Returns the fragment to display for that page 
@Override 
public Fragment getItem(int position) { 
    switch (position) { 
     case 0: 
      return Fragment_About.newInstance("About",20); 
     case 1: 
      return Fragment_EditSkills.newInstance ("Skills",30); 
     case 2: 
      return Fragment_EditActivities.newInstance("Activities",40); 

     default: 
      return null; 
    } 
} 
} 

Fragment_About.java

public class Fragment_About extends Fragment { 

public static Fragment_About newInstance(String name, int age) { 
    Bundle bundle = new Bundle(); 
    bundle.putString("name", name); 
    bundle.putInt("age", age); 

    Fragment_About fragment = new Fragment_About(); 
    fragment.setArguments(bundle); 

    Log.i("FragmentAbout instance","instance"); 
    Log.i("name",""+name); 
    Log.i("age",""+age); 
    return fragment; 
} 

private void readBundle(Bundle bundle) { 
    if (bundle != null) { 
     name = bundle.getString("name"); 
     age = bundle.getInt("age"); 
     Log.i("readBundle oncreateview","readBundle oncreateview"); 
     Log.i("name",""+name); 
     Log.i("age",""+age); 
    } 
} 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup 
    container, @Nullable Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_about, container, 
    false); 

    txtEditAbout = (TextView) view.findViewById(R.id.textEditAbout); 
    about = (TextView) view.findViewById(R.id.about); 

    readBundle(getArguments()); 

} 
} 

ログイン:fragmenにフラグメント3から2に後退

// when the activity is created. 
I/FragmentAbout instance: instance 
I/EditSkills instance: instance 


// When I click on page 2 
I/FragActivity instance: instance 

T 1が呼び出されますが、今回newInstance()は断片

I/readBundle oncreateview: readBundle oncreateview 

上記のプロセスを説明してください

のいずれかのために呼び出されません。

+0

'getItem'は常にコード内に新しいインスタンスを返します。スワイプすると次の最も近いフラグメントがメモリにロードされます。配列アダプターのように、Fragmentオブジェクトのリストを格納することができます –

答えて

0

OffscreenPageLimitに応じて、Viewpagerは隣接フラグメントをプリロードします。デフォルトでは、1(DEFAULT_OFFSCREEN_PAGES = 1)に設定されている

あなたは、彼らが制限オフスクリーンその後、遠くにある場合、フラグメントビューが破壊される可能性があることを意味しFragmentPagerAdapterを、使用していました。

関連する問題