2

В словесной игры для Android с DrawerLayout влево и вправо навигационные ящики закрываются следующим кодом в MainActivity:Handling Назад кнопку на заказ Вид

@Override 
public void onBackPressed() { 
    if (mDrawerLayout.isDrawerOpen(mLeftDrawer)) { 
     mDrawerLayout.closeDrawer(mLeftDrawer); 
    } else if (mDrawerLayout.isDrawerOpen(mRightDrawer)) { 
     mDrawerLayout.closeDrawer(mRightDrawer); 
    } else { 
     super.onBackPressed(); 
    } 
} 

Это хорошо работает (левый скриншот) -

app screenshot

Однако я также пытается обнаружить Кнопка Назад в моей настраиваемое представление (который переопределяет onDraw способа привлечь прокрутку настольной игры и письмо плитку) следующие способами - (чтобы приложение пользователя отменяя плитку обменивать или вспомнить несыгранную плитку с игровым поля) - но ни один из них не называются:

@Override 
public boolean dispatchKeyEventPreIme(KeyEvent event) { 
    if (mSwapping && event.getKeyCode() == KeyEvent.KEYCODE_BACK) { 
     cancelSwapLetters(); 
     return true; 
    } 

    return super.dispatchKeyEventPreIme(event); 
} 

@Override 
public boolean onKeyPreIme(int keyCode, KeyEvent event) { 
    if (mSwapping && keyCode == KeyEvent.KEYCODE_BACK) { 
     cancelSwapLetters(); 
     return true; 
    } 

    return super.onKeyPreIme(keyCode, event); 
} 

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (mSwapping && keyCode == KeyEvent.KEYCODE_BACK) { 
     cancelSwapLetters(); 
     return true; 
    } 

    return super.onKeyDown(keyCode, event); 
} 

У меня есть помещают точки останова в вышеуказанные методы, но ни один из них не попадает.

Пожалуйста, сообщите мне, как решить эту проблему.

ответ

7

Этот код помог мне вернуться пресс-конференцию в фрагменте попробовать этот код:

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) { 

        if(you handled back press) return true; 
        else return false; 
      } 
     }); 
+1

После вызова 'setFocusableInTouchMode (истина) и' requestFocus() 'в моей настраиваемое представление, все 3 метода были вызываемые в этом порядке: 'dispatchKeyEventPreIme',' onKeyPreIme', 'onKeyDown'. Спасибо –

+0

Рад, что я мог бы помочь. ура! – vaibhav

+0

В библиотеке DialogPlus 'setFocusableInTouchMode' не существует. Он не уверен? –

Смежные вопросы