2017-04-16 10 views
0

ビューページに3つのタブがあります。それらをタブA、B、Cと呼ぶことができます。それぞれのタブにはそれぞれフラグメントがあり、frag1、frag2、frag3と呼ぶことができます。 私がしたいタブAのfrag1を新しいフラグメントfrag4で置き換え、ビューページの他のタブはそのままにしておきます。 フラグメントを置き換えようとしましたが、動作しません。私はpageradapterに何かを実装する必要がありますか?ビューページのタブの位置でフラグメントを置き換える方法は?

public class SectionsPagerAdapter extends FragmentPagerAdapter { 

private FragmentManager mFragmentManager; 
private Fragment frag = null; 

public SectionsPagerAdapter(FragmentManager fm) { 
    super(fm); 
    mFragmentManager = fm; 
} 


public void onSwitchToNextFragment() { 
    mFragmentManager.beginTransaction().remove(frag) 
      .commit(); 
    if (frag instanceof Fragment1){ 

     Log.v("here","swapping"); 
     frag = Fragment4.newInstance(); 
    } 
    Log.v("here","notified"); 
    notifyDataSetChanged(); 
} 
@Override 
public Fragment getItem(int position) { 
    switch (position) { 
     case 0: 
      frag = Fragment1.newInstance(); 
      Log.v("here","in getitem"); 
      return frag; 

     default: 
      Log.v("here","in default"); 
      return Fragment2.newInstance(); 
    } 
} 

@Override 
public int getCount() { 
    // Show 3 total pages. 
    return 3; 
} 

@Override 
public CharSequence getPageTitle(int position) { 
    switch (position) { 
     case 0: 
      return "SECTION 1"; 
     case 1: 
      return "SECTION 2"; 
     case 2: 
      return "SECTION 3"; 
    } 
    return null; 
} 

public void switchFrag(){ 
     onSwitchToNextFragment(); 
    // mFragmentManager.beginTransaction().replace(R.id.container,frag).commit(); 
    //  mFragmentManager.beginTransaction().add(frag).commit(); 
    notifyDataSetChanged(); 
} 

答えて

0

ビューページでフラグメントを置き換えるには、2通りの方法があります。オプション1:getItemPosition(Objectオブジェクト)メソッドをオーバーライドします。あなたは()notifyDataSetChangedを呼び出すと

public int getItemPosition(Object object) { 
    return POSITION_NONE; 
} 

、ビューのページャは、すべてのビューを削除し、それらのすべてをリロードします。しかしこれはあまり効率的ではありません。

または、新しいビューをインスタンス化するときにinstantiateItem()を呼び出します。次に、notifyDataSetChanged()を使用する代わりに、findViewWithTag()を使用して更新するビューを見つけることができます。このオプションはより効率的でフレキシブルです

関連する問題