2016-04-05 7 views
0
@Override 
public void onBackPressed() { 
    if (getSupportFragmentManager().getBackStackEntryCount() > 0) { 
     FragmentManager.BackStackEntry bSE = getSupportFragmentManager().getBackStackEntryAt(getSupportFragmentManager().getBackStackEntryCount() - 1); 
     Fragment frag = getSupportFragmentManager().findFragmentByTag(bSE.getName()); 
     if (frag instanceof BackButtonBlocker) 
     { 
      BackButtonBlocker callback = (BackButtonBlocker) frag; 
      callback.onBackPressed(); 
     } 
     else { 
      getSupportFragmentManager().popBackStack(); 
     } 
    } else { 
     super.onBackPressed(); 
    } 
} 

BackButtonBlockerインターフェイスはコールバック用です。私のフラグメントはBackButtonBlockerを実装しますが、時にはonBackPressedは発生しません(onKeyUpも同様です)。onBackPressedのアンドロイドアクティビティは呼び出されません。

ナビゲーション・ドロワーを開くと、onBackPressedと完全なロジックが正確に機能します。

なぜアクティビティにフォーカスが失われるのですか?

android.support.v4.app.Fragment

public interface BackButtonBlocker{ void onBackPressed();} 
+0

setFocusableInTouchMode(true); requestFocus();を追加することで、この問題を修正しました。 – sofie

+0

戻るボタンを押すと、フラグメントでコールバックを取得する必要があります。 (たとえば、任意のダイアログを開くために) – sofie

答えて

0

私は,,「」置き換える使用してフラグメントを追加したMainactivityのコンテナビュー

0

私がやっていることelse{}

0

からsuper.onBackPressed();を取り出し、私は以下を参照してくださいを押すバック処理するための任意のインターフェイスを実装していない、ということです。

@Override 
public void onBackPressed() { 
    if (getDrawerLayout().isDrawerOpen(GravityCompat.START)) { 
     closeLeftMenu(); 
    } 
else { 

    if (getSupportFragmentManager().getBackStackEntryCount() > 1) { 
     super.onBackPressed(); 
    } else { 
     finish(); // Means it is home and you can exit it from here. 
    } 
}} 


When drawer is open just close it then use your code. 
+0

これは問題ではありません。私は、戻るボタンが押されると、フラグメントでコールバックを取得する必要があります。 (たとえば、任意のダイアログを開くために) – sofie

+0

これはあなたに役立つかもしれない状態を修正しました。 –

関連する問題