2016-06-18 5 views
0

F1とF2として2つのフラグメントがあります。 F1からOnKeyPressedのOnResumeを上書きして、F2キーを押します。 F2で、OnKeyPressedのOnResumeをオーバーライドして、押されたアプリケーションを閉じます。 しかし、問題は私がF1に戻るボタンを予告しているときにアプリを直接閉じることです。 ログを介して私は、F1の戻るボタンを押しているときに、F2のOnKeyPressedもアクティブになっていることに気付きました。 これを修正する方法。OnKeyPressedは2つのフラグメントで一緒にアクティブになっています

F1、次のように私のコードは次のようにF2のため

@Override 


public void onResume() { 

    super.onResume(); 

    getView().setFocusableInTouchMode(true); 


    getView().requestFocus(); 

    getView().setOnKeyListener(new View.OnKeyListener() { 

     @Override 

     public boolean onKey(View v, int keyCode, KeyEvent event) { 

      System.out.println("back pressed"); 

      switch (keyCode) { 

       case KeyEvent.KEYCODE_BACK: 

        launchFragment(new F2(), F2.class.getSimpleName()); 
        return true; 
      } 
      return false; 
     } 
    }); 
} 

私のコードは次のとおりです。

@Override 

public void onResume() { 

    super.onResume(); 

    getView().setFocusableInTouchMode(true); 

    getView().requestFocus(); 

    getView().setOnKeyListener(new View.OnKeyListener() { 

     @Override 

     public boolean onKey(View v, int keyCode, KeyEvent event) { 

      System.out.println("Set back pressed"); 

      switch (keyCode) { 

       case KeyEvent.KEYCODE_BACK: 

        Activity a=getActivity(); 
        a.finish(); 
        return true; 
      } 
      return false; 
     } 
    }); 
} 

答えて

1

あなたは断片の親アクティビティにフラグメントのトランザクションを処理する必要があります。追加または断片を交換する際に、常に親アクティビティのonBackPressed()にフラグメントのbackpressイベントを処理し、今、この

MyFragment fragment = new MyFragment(); 
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); 
fragmentTransaction.replace(R.id.container, fragment); 
// This will add the framgent to backStack that we will use later to retrieve the fragment 
fragmentTransaction.addToBackStack(""); 
fragmentTransaction.commit(); 

のようなものをaddToBackStack(null)を呼んで、あなたの追加の断片

ここ

は一例です

@Override 
public void onBackPressed() { 
    // get the number of fragments added to the backStack 
    int count = getFragmentManager().getBackStackEntryCount(); 
    switch(count){ 
     // if count is 0 it means no fragment is added yet 
     case 0: 
      super.onBackPressed(); 
      break; 
     case 1: 
      // handle click of backPress in first fragment here 
      // getFragmentManager().popBackStack() will take you to the previous fragment. 
      getFragmentManager().popBackStack(); 
      break; 
     case 2: 
      // handle click of backPress in second fragment here or 
      getFragmentManager().popBackStack(); 
      break; 
     default: 
      getFragmentManager().popBackStack(); 
      break; 
    } 
} 

これはフラグメントトランザクションとonBacを処理するための最善の唯一の方法ですkプレスイベント

希望すると助かります

関連する問題