Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android必知必會-Fragment監聽返回鍵事件

Android必知必會-Fragment監聽返回鍵事件

編輯:關於Android編程

背景

項目要求用戶注冊成功後進入修改個人資料的頁面,且不允許返回到上一個頁面,資料修改完成後結束當前頁面,進入APP主頁。

由於是使用多個Fragment完成注冊流程,就需要Fragment監聽用戶點擊手機上的返回按鈕,查了一些資料,加上自己使用過程中發現的問題,特此記錄,幫助更多有此需求的朋友

代碼實現

XXX_Fragment

 @Override
    public void onResume() {
        super.onResume();
        getFocus();
    }

    //主界面獲取焦點
    private void getFocus() {
        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_UP && keyCode == KeyEvent.KEYCODE_BACK) {
                    // 監聽到返回按鈕點擊事件
                    ......
                   return true;
                }
                return false;
            }
        });
    }

以上代碼是stackoverflow.com中找到的一個解決方案,但是在使用時,由於Fragment頁面裡可能有其他能獲取焦點的View(例如EditText),會導致監聽失效,點擊返回鍵會返回到上個頁面。

更完善的解決方案:

除了上面的代碼,我們需要對可以獲取焦點的View的setOnKeyListener進行處理,這裡以一個EditText為例:

//private EditText nickname;

nickname.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                if (keyCode == KeyEvent.KEYCODE_BACK
                        && event.getAction() == KeyEvent.ACTION_UP) {
                    //關閉軟鍵盤
                    InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.hideSoftInputFromWindow(nickname.getWindowToken(), 0);
                    //使得根View重新獲取焦點,以監聽返回鍵
                    getFocus();
                }
                return false;
            }
        });

 

 
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved