2016-01-19 3 views
0

Я внедрил переопределение клавиши кнопки «Назад» в устройстве. теперь по какой-то причине метод onKey никогда не выполняется, и поэтому, когда я нажимаю кнопку «Назад», приложение сворачивается на обратную сторону, вместо этого делает код onKey. Я не уверен, в чем проблема, поэтому я загружу весь код.onKey метод никогда не выполняется

Это мой код:

@Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(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) { 
         String frag_name = getFragmentManager().getBackStackEntryAt(getFragmentManager().getBackStackEntryCount() - 1).getName(); 
         Log.d("frag name is", frag_name); 
         Fragment fragment = null; 
         switch (frag_name){ 
          case "back_to_attending": 
           fragment = new AttendingListFragmentController(); 
           break; 
          case "back_to_invitations": 
           fragment = new InvitationsFragmentController(); 
           break; 
          case "waiting_list": 
           fragment = new WaitingEventListFragmentController(); 
           break; 
          default: 
           break; 
         } 

         if(fragment != null){ 
          FragmentManager fragmentManager = getFragmentManager(); 
          fragmentManager.popBackStackImmediate(); 
          fragmentManager.beginTransaction().replace(R.id.content_frame, fragment,frag_name).addToBackStack(frag_name).commit(); 
         } 

        } 
       } 
       return false; 
      } 
     }); 
    } 
+0

Пожалуйста, разместите только соответствующую деталь. Никто не собирается читать целый файл. – RvdK

+0

да, но если я предоставлю onlt код onKey, как вы можете знать, что другая часть кода не будет релевантна? –

+0

Посмотрите мой обновленный код –

ответ

1

Попробуйте это:

public class MyClass implements OnKeyListener { 
... 

Затем переопределить метод onKey

@Override 
public boolean onKey(View v, int keyCode, KeyEvent event) { 
    //do what you want 
    return false; 
} 
+0

все тот же .. –

+0

Попробуйте установить фокус на основной макет вашей деятельности. –

+0

как я могу это сделать? У меня есть 2 макета в этом фрагменте, возможно, из-за этого его событие –

0

Какие результаты вы получаете, когда вы переопределить onBackPressed()?

+0

@Nicolas Cortell Я думаю, что его код в настоящее время похож на то, что вы предложили. –

+0

Я использую во всех остальных моих фрагментах/действиях метод onKey и его работу, поэтому я не думаю, что это вопрос, какой именно метод. возможно, в остальной части кода есть другая проблема, но я не могу ее найти. –

+0

@ KunalKhaire, если он использует «Фрагмент», ваш код не будет работать –

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