場景:在項目中做聯(lián)系人界面時究孕,需要按名字和按部門顯示聯(lián)系人庸毫,此處使用2個fragment切換顯示范舀,按部門顯示需要體現(xiàn)部門層級關(guān)系合是,需要實現(xiàn)點擊返回上級部門。因為Fragment并不能像在Actvity重寫onBackPressed即可锭环,此時就需要在Fragment監(jiān)聽處理返回聪全,否則返回事件在Activity中,并不能返回上級部門田藐。
- Fragment中沒有可以主動獲取焦點的控件(<small>如:edittext</small>)
//主界面獲取焦點
@SuppressWarnings("ConstantConditions")
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) {
//TODO: handle back button
return true;
}
return false;
}
});
}
- Fragment中有可以主動獲取焦點的控件,需要對它進行處理
editText.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
//關(guān)閉軟鍵盤
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
//TODO: handle back button
return true;
}
return false;
}
});
參考來源:https://stackoverflow.com/questions/22552958/handling-back-press-when-using-fragments-in-android
以上方法測試有效荔烧,另附上其他方法(<small>未測試</small>)