2016-12-22 4 views
-1

フラグメントがCompanyFragment、DashboardFragment、CalendarFragmentと表示されています。 私のデフォルトフラグメントはCompanyFragmentです。POP_BACK_STACK_INCLUSIVE前のフラグメントのonResumeメソッドを呼び出す原因

流れがそうDashboardFragmentに戻ってくる必要がありますCalenderFragmentから日付を選択した後CalenderFragment
  • に移動するダッシュボードから日付を変更DashboardFragment
  • への移動CompanyFragment
  • から

    • 選択カンパニーである必要があります期待

    は、今私は3つの断片は、フラグメントマネージャに追加されてい CompanyFragment - > DashboardFragment - > CalenderFragment私は私が使用していますfragmentmanagerにフラグメントエントリをチェックするには

    public void setFragmentToContainer(Fragment fragment) { 
    
         final String tag = fragment.getClass().getName(); 
         if (manager == null) { 
          manager = getSupportFragmentManager(); 
         } 
         transaction = manager.beginTransaction(); 
         if (isFragmentInBackstack(manager, tag)) { 
          if (fragment instanceof DayPartStoreListingFragment) { 
          } else { 
           manager.popBackStackImmediate(tag, manager.POP_BACK_STACK_INCLUSIVE); 
          } 
         } else { 
          // Fragment doesn't exist 
         } 
         if (fragment instanceof CalenderFragment) { 
          transaction.setCustomAnimations(R.anim.slide_up, 0, 0, R.anim.slide_down); 
         } 
         if (fragment instanceof DayPartStoreListingFragment) { 
          transaction.add(R.id.layout_content, fragment, tag); 
         } else { 
          transaction.replace(R.id.layout_content, fragment, tag); 
         } 
         if (fragment instanceof CompanyLevelFragment) { 
          //Exit app on back press 
         } else { 
          transaction.addToBackStack(tag); 
         } 
         transaction.commit(); 
        } 
    

    フラグメントに置き換え/追加するには、次のコードスニペットを使用しています

    次のコード

    public static boolean isFragmentInBackstack(final FragmentManager fragmentManager, final String fragmentTagName) { 
        for (int entry = 0; entry < fragmentManager.getBackStackEntryCount(); entry++) { 
         if (fragmentTagName.equals(fragmentManager.getBackStackEntryAt(entry).getName())) { 
          return true; 
         } 
    
        } 
        return false; 
    } 
    

    問題は次のとおりです。 私はDashboardFragmentを開こうとしたときCalendarFragmentからCompanyFragmentのonResumeが呼び出された後、DashboardFragment onResumeが呼び出されます。 注:私はCompanyFragmentをCalenderFragmentから呼び出さず、CompanyFragments onResumeはDashboardFragmetのonResumeの前に自動的に呼び出されます。別の断片についても同じことが起こります。日付変更後、前のフラグメントのonResumeが最初に呼び出され、次に要求されたフラグメントのonResumeが呼び出されます。

    デバッグ後に私が見つけた問題 manager.popBackStackImmediate(tag、manager.POP_BACK_STACK_INCLUSIVE);

    上記のコードからこの行を削除しても、上記のシナリオを再現できない場合は、しかし、バックスラックから同じフラグメントの古いエントリをクリアするには、この行が必要です。私は本当に助けが必要です。

  • +0

    サポートライブラリのどのバージョンを使用していますか? –

    +0

    こんにちはPosumyambu私はこの問題を解決することができます。答えは – Reena

    +0

    にポストしてください。 Pls。 –

    答えて

    0

    ステップ1:このコードは仕事がそれを試しになるかもしれませ断片

    FragSignIn fragSignIn=(FragSignIn) getSupportFragmentManager().findFragmentByTag(FragSignIn.class.getName()); 
        if(fragSignIn!=null && fragSignIn.isVisible()){ 
         fragSignIn.onResume(); 
        }else { 
         super.onBackPressed(); 
        } 
    

    の主な活動にonBAckPressedライト:フラグメントの取引に使用するAddメソッドではありません

    FragSignUp FragSignUp = new FragSignUp(); 
         FragmentTransaction ft = root.getSupportFragmentManager().beginTransaction(); 
         ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left, R.anim.slide_in_right, R.anim.slide_out_right); 
         ft.addToBackStack(FragSignUp.class.getName()); 
         ft.add(R.id.containerLogin, FragSignUp, FragSignUp.class.getName()); 
         ft.commit(); 
    

    ステップ2置き換える使用します。 ..

    +0

    こんにちはRobby、そのようには役に立たない – Reena

    0

    コードは、この問題を把握するのに役立ったスニペットを次に示し

    private void setFragmentToContainer(Fragment fragment) { 
         try { 
          String fragmentTag = fragment.getClass().getName(); 
    
          manager = getSupportFragmentManager(); 
          boolean fragmentPopped = manager.popBackStackImmediate(fragmentTag, 0); 
    
          if (!fragmentPopped && manager.findFragmentByTag(fragmentTag) == null) { //fragment not in back stack, create it. 
           FragmentTransaction ft = manager.beginTransaction(); 
           ft.replace(R.id.layout_content, fragment, fragmentTag); 
    
           ft.addToBackStack(fragmentTag); 
           ft.commit(); 
          } 
         } catch (IllegalStateException e) { 
          e.printStackTrace(); 
         } 
    } 
    
    関連する問題