2017-01-14 7 views
1

FragmentのonKeyListener()が動作していません。ここにコードの一部があります。アンドロイド:Fragment内の[戻る]ボタンのOnKeyListenerが機能しない

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment, null); 
    ... 

    view.setFocusableInTouchMode(true); 
    view.requestFocus(); 
    view.setOnKeyListener(new View.OnKeyListener() { 

     // true if the listener has consumed the event, false otherwise. 
     // the key event happens twice, when pressing and taking off. 
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      if(keyCode == KeyEvent.KEYCODE_BACK && !touched) { 
       Log.i(TAG, "onKey() method"); 
       touched = true; 
       return true; 
      } else { 
       return false; 
      } 
     } 
    }); 

    return view; 
} 

紛失しているものはありますか?

答えて

6

はこれを試してみてください。

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 

    super.onViewCreated(view, savedInstanceState); 
    getView().setFocusableInTouchMode(true); 
    getView().requestFocus(); 
    getView().setOnKeyListener(new View.OnKeyListener() { 
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      if (event.getAction() == KeyEvent.ACTION_DOWN) { 
       if (keyCode == KeyEvent.KEYCODE_BACK) { 
        //go to previous fragemnt 
        //perform your fragment transaction here 
        //pass data as arguments 
        return true; 
       } 
      } 
      return false; 
     } 
    }); 
} 
+0

申し訳ありませんが、私はちょうどあなたの答えをチェックアウトしました。しかし、その場合、 'R.layout.fragment'ファイルをどのように膨らませるべきですか? –

+0

あなたは 'oncreateview()'でレイアウトを膨張させ、 'onViewcreated()'でキーリスナーを待ち受けることができます – rafsanahmad007

+0

ああ!私は2つの名前がほぼ同じように見えたので混乱しました。とにかく私はあなたのやり方でそれを試しましたが、どちらもうまくいかなかったのです。 –

関連する問題