2016-12-22 6 views
0
で同じフラグメントを防ぐため、複数回、ここで

こんにちはみんなは私のコードbackstack

 
navigationView.setNavigationItemSelectedListener(new NavigationView 
       .OnNavigationItemSelectedListener() { 
      @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
       if (item.isChecked()) { 
        //item already selected. Do nothing 
        drawerLayout.closeDrawer(GravityCompat.START); 
        return true; 
       } 
       switch (item.getItemId()) { 
        case R.id.home: 
         FragmentTransaction transaction = getSupportFragmentManager() 
           .beginTransaction(); 
         transaction.replace(R.id.fragment, new HomeFragment()) 
           .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).commit(); 
         break; 
        case R.id.other: 
         transaction = getSupportFragmentManager().beginTransaction(); 
         transaction.replace(R.id.fragment, new OtherFragment()) 
           .addToBackStack(null).setTransition(FragmentTransaction 
           .TRANSIT_FRAGMENT_FADE).commit(); 
         break; 
        default: 
         break; 
       } 
       drawerLayout.closeDrawer(GravityCompat.START); 
       return true; 
      } 
     }); 

である私は、基本的には唯一の2つの断片を持っており、単にHomeFragmentはbackstackに追加する必要があります。 HomeFragmentとOtherFragmentをしばらく切り替えてHomeFragment上に戻るボタンをクリックすると、HomeFragmentが何度か表示されてしまいます。 HomeFragmentにはrecyclerviewがあります。上下にスクロールすると、行が複数回表示されることが実際に分かります。 HomeFragmentがバックスタックに一度だけ追加されていることを確認する方法を教えてください。

おかげ

答えて

0

あなたは[ホーム]メニュー項目をクリックすると任意のフラグメントbackstack中があるか否かを調べるためにしてみてください。はいの場合は、popBackStack()を呼び出すか、そうでない場合はフラグメントを置き換えます。このコードを使用します。

if (getSupportFragmentManager().getBackStackEntryCount() > 0) { getSupportFragmentManager().popBackStack(); }

+0

偉大な答えは@janzonerありがとうございます。それは魅力として働く。私のrecyclerViewは常にデータを表示していません。時々それはちょうど空であるansをするいくつか。奇妙な – DeKekem

+0

あなたは大歓迎です。私はあなたのRecyclerViewでこの問題を解決することを願っています。そうでない場合は、StackOverflowのヘルプをもう一度お試しください。 – janzoner

0

あなたは簡単に

YourFragment.isAdded 

であなたのフラグメントをチェックすることができそして、あなたは複数の断片を持っている場合は、すべてのフラグメントを管理するための新しいクラスを作成することができますし、フラグメントかどうかを確認するために状態を作成します追加されたかどうかを確認します。

関連する問題