2017-01-25 17 views
0

私は私のアプリの上で実装するフラグメントと下のバーに問題がある...スイッチ断片(表示/非表示)のAndroid

私は下のバーを初期化するに従って、フラグメントを切り替えるワン.. この私のコード

private Fragment frag_summary = new SummaryFragment(); 
    private Fragment frag_my_proposal = new MyProposalFragment(); 
    private Fragment frag_proposal = new ProposalFragment(); 
    private Fragment frag_friends = new FriendsFragment(); 

bottomNavigation.setOnTabSelectListener(new OnTabSelectListener() { 
      @Override 
      public void onTabSelected(@IdRes int tabId) { 
       setSelectedFragment(tabId); 
      } 
     }); 


    public void setSelectedFragment(int id) { 
     switch (id) { 
      case R.id.menu_home: 
       setFragment(id, frag_summary); 
       break; 
      case R.id.menu_my_proposals: 
       setFragment(id, new MyProposalFragment()); 
       break; 
      case R.id.menu_proposal: 
       setFragment(id, new ProposalFragment()); 
       break; 
      case R.id.menu_friends: 
       setFragment(id, new FriendsFragment()); 
       break; 
      case R.id.menu_more: 
       /* drawer.openDrawer(GravityCompat.START); 
       if (drawer.isDrawerOpen(GravityCompat.START)) { 
        drawer.closeDrawer(GravityCompat.START); 
       } else { 
        drawer.openDrawer(GravityCompat.START); 
       }*/ 
       break; 
      default: 
       setFragment(id, frag_summary); 
       break; 

     } 
    } 

    private void setFragment(int id, Fragment fragments) { 

     FragmentManager fragmentManager = getSupportFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
     String fragmentTag = String.valueOf(id); 

     if (frag_summary.isAdded()) { 
      fragmentTransaction.hide(frag_summary); 
     } 
     if (frag_my_proposal.isAdded()) { 
      fragmentTransaction.hide(frag_my_proposal); 
     } 
     if (frag_proposal.isAdded()) { 
      fragmentTransaction.hide(frag_proposal); 
     } 
     if (frag_friends.isAdded()) { 
      fragmentTransaction.hide(frag_friends); 
     } 
     if (fragments.isAdded()) { 
      fragmentTransaction.show(fragments); 
     } else { 
      fragmentTransaction.add(R.id.content_frame, fragments, fragmentTag); 
     } 

     fragmentTransaction.commitAllowingStateLoss(); 


    } 

問題は次のとおりです。フラグメントfrag_summaryからフラグメントfrag_friendsを選択すると、フラグメントfrag_summaryおよび他のフラグメントが他のアクティビティと同じように表示されることがありました。例:フラグメントfrag_friendsからフラグメントfrag_proposal。

shoそれを修正するには? はとsetFragmentのコードRepalce私の英語

答えて

0

のため申し訳ありません -

FragmentManager fragmentManager = getSupportFragmentManager(); 
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
fragmentTransaction.replace(R.id.content_frame, fragments, fragmentTag); 
fragmentTransaction.commitAllowingStateLoss(); 

基本的には、現在のvisivbleフラグメントを交換します。

編集:以下のようにコードを変更する -

public void setSelectedFragment(int id) { 
     switch (id) { 
      case R.id.menu_home: 
       setFragment(id, frag_summary); 
       break; 
      case R.id.menu_my_proposals: 
       setFragment(id, /*send the class instance you created for this fragment */); 
       break; 
      case R.id.menu_proposal: 
       setFragment(id, /*send the class instance you created for this fragment */); 
       break; 
      case R.id.menu_friends: 
       setFragment(id, /*send the class instance you created for this fragment */); 
       break; 
      case R.id.menu_more: 
       /* drawer.openDrawer(GravityCompat.START); 
       if (drawer.isDrawerOpen(GravityCompat.START)) { 
        drawer.closeDrawer(GravityCompat.START); 
       } else { 
        drawer.openDrawer(GravityCompat.START); 
       }*/ 
       break; 
      default: 
       setFragment(id, frag_summary); 
       break; 

     } 
    } 
+0

おかげで、私はフラグメントの再リロードせずに切り替えたいです。私は断片の最後の状態で切り替えたい... –

+0

私が与えた提案もうまくいくでしょう。しかし本当の問題は、 'setFragment'を呼び出すときにインスタンス変数を渡す代わりに、各フラグメントの新しいインスタンスを送信していることです。私は自分の答えを編集した – Dibzmania

関連する問題