2014-02-11 2 views
0

Я показываю диалог в приложении-start, где вам нужно выбрать конфигурацию. Поскольку необходимо выбрать один конфиг, я хочу «отключить» обратную кнопку через пустой onBackPressed().onBackPressed() не работает

Я получил следующий код в DialogFragment:

public class ChangeConfigDialogFragment extends DialogFragment { 

    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     // Use the Builder class for convenient dialog construction 
     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
     builder.setTitle(R.string.dialog_config_change) 
       .setItems(R.array.config_array, 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, 
            int which) { 
           // The 'which' argument contains the index 
           // position 
           // of the selected item 
           if (which == 0){ 
            Initiation.BAUDRATE = 500; 
            Toast.makeText(getActivity(), "Baudrate at " + Initiation.BAUDRATE, Toast.LENGTH_LONG).show(); 
            if (Initiation.getADK() == null){ 
             Initiation.initiateCAN(); 
            } 
           } else if (which == 1) { 
            Initiation.BAUDRATE = 600; 
            Toast.makeText(getActivity(), "Baudrate at " + Initiation.BAUDRATE, Toast.LENGTH_LONG).show(); 
            if (Initiation.getADK() == null){ 
             Initiation.initiateCAN(); 
            } 
           } else if (which == 2) { 
            Initiation.BAUDRATE = 700; 
            Toast.makeText(getActivity(), "Baudrate at " + Initiation.BAUDRATE, Toast.LENGTH_LONG).show(); 
            if (Initiation.getADK() == null){ 
             Initiation.initiateCAN(); 
            } 
           } 

          } 

         }); 
     // Create the AlertDialog object and return it 
     return builder.create(); 
    } 

    public void onBackPressed(){ 
     Log.d(getTag(), "are you there?"); 

    } 
} 

Проблема заключается в том, что onBackPressed() никогда не был назван. Даже сообщение журнала не отображается.

Я пытался очистить проект, но не удался. Также попытался использовать метод onKeyDown из некоторых других тем здесь, на SO. Кто-нибудь знает, как это решить?

EDIT:

Он работает в настоящее время. .setCancelable(false); работал, но я был глуп, чтобы добавить его в Dialog, из которого был вызван Fragment. (Вместо того, чтобы добавили его к builder

Спасибо за вашу помощь и время.

+1

'onBackPressed()' является активность и не фрагментировать метод - вы не отменяя ничего. Чего вы пытаетесь добиться, переопределив это? – laalto

+0

Как насчет установки KeyListener? – Triode

+0

Я попробовал, потому что в другом приложении это сработало. Поэтому я просто скопировал код 'onBackPressed()' и подумал, что это сработает, так как это не я начал искать ответы – Fraggles

ответ

3

От вашего вопроса кажется, что пока ваш диалог открыт, вам не нужно закрывать диалог, пока пользователь не сможет выбрать любой из 1 открытых диалоговых окон, если я не ошибаюсь, поэтому для этого вам не нужно отключать обратный ключ, но вы необходимо установить эти два свойства для диалога.

dialog.setCancelable(false); 
dialog.setCanceledOnTouchOutside(false); 

ИЛИ

Если вы хотите отключить клавишу возврата, то используйте следующий код,

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
if (keyCode == KeyEvent.KEYCODE_BACK) { 
//preventing default implementation previous to android.os.Build.VERSION_CODES.ECLAIR 
return true; 
} 
return super.onKeyDown(keyCode, event); } 

OnbackkeyPressed Требуется Api уровень 5 или выше.

@Override 
public void onBackPressed() { 
} 
+0

' setCancelable (false); 'не отключает функциональность BackButton. KeyDown не работает, потому что его не определено для DialogFragment и onBackPressed также вызывает его Метод активности – Fraggles

+0

вам просто нужно установить это свойство для своего диалогового окна dialog.setCanceledOnTouchOutside (false); & для отключения кнопки возврата проверить эту ссылку http://stackoverflow.com/questions/4779954/disable-back-button-in-android –

+0

Я не могу создать объект AlertDialog, потому что конструктор не виден :( – Fraggles

1
+0

Это сделает трюк – Triode

+0

@RajeshCP Я так думаю, esp для его требования – user2450263

+0

Но все же я могу нажать BackButton, и Диалог исчезает. Thats, что я пытаюсь предотвратить – Fraggles

1

Попробуйте

public boolean onKeyDown(int keyCode, KeyEvent event) { 
     // Handle the back button 

     if (keyCode == KeyEvent.KEYCODE_BACK) { 
        return false; 
     } 
     return super.onKeyDown(keyCode, event); 
    } 

или

dialog.setCancelable(false); 
+0

, вы правильно прочитали вопрос, как он указал «Я хочу« отключить »обратную кнопку через пустой onBackPressed()« –

+0

. Я также написал, что я попробовал это с помощью метода onKeyDown – Fraggles

+0

, метод '.onKeyDown' не определен в DialogFragment – Fraggles

0

Я не пробовал, но это может работать, если вы установите OnKeyListener на строителя, как это:

builder.setOnKeyListener(new DialogInterface.OnKeyListener() { 
    @Override 
    public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_BACK) { 
      return false; 
     } 
    } 
}); 
Смежные вопросы