2017-06-29 12 views
2

私はBottomNavigationViewを持っています。これはフラグメントを含んでいて、それらのフラグメントの1つにタブを入れ、それらのタブにフラグメントを入れたいと思いますが、これを行う方法はわかりません。タブを含む別のフラグメントの中にフラグメントを入れますか?

このコードでは、スニペットにタブがあり、エラーをマークしました
動作させるには何を追加または変更する必要がありますか?

マイフラグメントコード:

public class HomeFragment extends Fragment { 

private Toolbar supportActionBar; 

public HomeFragment() { 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.fragment_home, container, false); 

    Toolbar myToolbar = (Toolbar) view.findViewById(R.id.my_toolbar); 
    setSupportActionBar(myToolbar); 

    TabLayout tabLayout = (TabLayout) view.findViewById(R.id.tabLayout); 
    tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.ic_whatshot_black_24dp)); 
    tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.ic_person_black_24dp)); 
    tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.ic_phone_black_24dp)); 
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 


    final ViewPager viewPager = (ViewPager) view.findViewById(R.id.viewPager); 


    **Here it marks an error that I have wrong** 

    PagerAdapter adapter = new PagerAdapter(getSupportFragmentManager(), tabLayout.getTabCount()); 

    viewPager.setAdapter(adapter); 
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 
    tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      int position = tab.getPosition(); 
      viewPager.setCurrentItem(position); 
     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 

     } 

     @Override 
     public void onTabReselected(TabLayout.Tab tab) { 

     } 
    }); 

    return view; 
    } 


public void setSupportActionBar(Toolbar supportActionBar) { 
    this.supportActionBar = supportActionBar; 
    } 

    } 

問題は、この行に

PagerAdapter adapter = new PagerAdapter(getSupportFragmentManager(), tabLayout.getTabCount()); 

PagerAdapterコードです:あなたはの子FragmentManagerを使用する必要があります

public class PagerAdapter extends FragmentStatePagerAdapter { 

private int numberTabs; 

public PagerAdapter(FragmentManager fm, int numberTabs) { 
    super(fm); 
    this.numberTabs=numberTabs; 
} 

@Override 
public Fragment getItem(int position) { 

    switch (position){ 

     case 0: 
      return new FragmentNovedades(); 
     case 1: 
      return new FragmentCuenta(); 
     case 2: 
      return new FragmentContacto(); 
     default: 
      return null; 
    } 
} 

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

答えて

1

getSupportFragmentManager()が使用されている正しいフラグメントのクラスをインポートする必要があります。しかし、あなたの場合は、断片内にtablayoutを使用しています。したがって、tablayout内のすべてのフラグメントはgetChildFragmentManager()メソッドで操作されます。 getChildFragmentManager()の詳細については、here

+1

ありがとう私はこの方法を取ることができなかったことを知らなかった。私はそれを作動させ、それがどのように機能するかを見る。 –

1

断片フラグメント内。あなたはサポートライブラリが必要な場合

は、あなたは活動の内部フラグメントを持ちたいとき

+0

を参照してください。私はプログラミングに慣れていないと私は彼が私を助けることができるかどうか私は知らないと私は何を呼び出す必要があるかわからない。 –

+0

フラグメント内のフラグメントをgetChildFragmentManager()で置き換えることができるのと同じ方法で、getSupportFragmentManager()でアクティビティ内のフラグメントを置き換える方法は、すべてのことがスムーズに機能します。私は初心者のためにそれを知っているが、あなたはそれにいくつかの時間を取る場合はそれを行うことができます –

+0

@CarlosMarioドキュメントで "ChildFragmentManager"を検索すると、それはあなたに情報を求めるでしょう。 https://developer.android.com/reference/android/support/v4/app/Fragment.html#getChildFragmentManager() –

関連する問題