1

BottomNavigationViewを使用してフラグメント間を移動するアプリケーションがあります。フラグメント(SearchFragment)の1つに、タブビューがあり、EasyTabsで実装されています。フラグメントコンテンツがBottomNavigationView FragmentTransactionにロードされない

初めてSearchFragmentに移動すると、レイアウトが正しく読み込まれ、3つすべてのタブが読み込まれます。問題は、別のFragmentに移動してSearchFragmentに戻ると、レイアウトがロードされないということです。画面の上部にタブビューが表示されますが、コンテンツが表示されず、タブ間を移動して1つずつ表示する必要があります。

onNavigationItemSelected方法:SearchFragment内部

@Override 
public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.tab_search: 
      mFragment = new SearchFragment(); 
      break; 
       /*case R.id.tab_history: 
        mFragment = new RadioFragment(); 
        break;*/ 
     case R.id.tab_desc: 
      Bundle bundle = new Bundle(); 
      bundle.putBoolean("fromSetup", false); 
      mFragment = new DescriptionFragment(); 
      mFragment.setArguments(bundle); 
      break; 
       /*case R.id.tab_config: 
        mFragment = new RadioFragment(); 
        break;*/ 
    } 
    final FragmentTransaction transaction = mFragmentManager.beginTransaction(); 
    transaction.replace(R.id.main_container, mFragment).addToBackStack(null).commit(); 
    return true; 
} 

EasyTabsBuilder

EasyTabsBuilder.with(mTabs) 
      .addTabs(
        new TabItem(new SearchByDateFragment(), ""), 
        new TabItem(new SearchByEventFragment(), ""), 
        new TabItem(new SearchByDescriptionFragment(), "") 
      ) 
      .setTabsBackgroundColor(EasyTabsColors.White) 
      .setIndicatorColor(EasyTabsColors.Gray) 
      .setTextColors(EasyTabsColors.Black, EasyTabsColors.White) 
      .addIcons(
        R.drawable.ic_date_range_black_24dp, 
        R.drawable.ic_face_black_24dp, 
        R.drawable.ic_description_24px) 
      .hideAllTitles(true) 
      .Build(); 

答えて

2

私は、下部のナビゲーションおよびタブレイアウトとまったく同じ問題を得ました。

私が見つけた唯一の解決策は、フラグメントマネージャーから検索フラグメントと3タブを削除することでした。あなたのPageChangeListener

例私は私のbottomNavigationの4ページを持っ

 @Override 
     public void onPageSelected(int position) { 

      if (position != 3 && position != 2) { 
       List<Fragment> fragments = getSupportFragmentManager().getFragments(); 
       for (int i = fragments.size() -1; i >= 0; i--) { 
        if (fragments.get(i) != null) { 
         if (fragments.get(i).getClass() == OrderInProgressFragment.class || 
           fragments.get(i).getClass() == OrderFinishFragment.class || 
           fragments.get(i).getClass() == OrderFragment.class) { 
          getSupportFragmentManager().beginTransaction().remove(fragments.get(i)).commit(); 
          getSupportFragmentManager().executePendingTransactions(); 
         } 
        } 
       } 
      } 

      bottomNavigationView.getMenu().getItem(position).setChecked(true); 
     } 

と3位にあるを削除するには、私のフラグメントからonPageSelectedでそれを行うことができます。だから、もし私が現在私のフラグメントを使用しているかどうかをチェックするのは、以前のタブを使っていれば、タブを含むOrderFragmentを取り除きます。

+0

このメソッドは、私はあなたのアイデアを使用しました! 'SearchFragment'の' onDestroyView'メソッドで、SearchFragmentに関連するすべてのフラグメントを削除しました。 – Minoru

関連する問題