Как избежать отклонения DialogFragment при нажатии кнопки поиска - Android

После настройки:

MyDialogFragment fragment = new MyDialogFragment();
fragment .setCancelable(false);

он по-прежнему закрывается после нажатия на кнопку поиска. и я не нашел такой опции, как в действии, чтобы переопределить onKeyDown();

Мне нужно создать диалоговое окно, которое будет отображаться до тех пор, пока не будет нажата кнопка «Отклонить». Пожалуйста, помогите


person Hoochwo    schedule 01.06.2011    source источник
comment
Я настоятельно рекомендую вам изменить дизайн вашего пользовательского интерфейса таким образом, чтобы в этом не было необходимости. blog.radioactiveyak.com/ 2010/08/   -  person CommonsWare    schedule 01.06.2011
comment
Поместите сообщение в любой фрагмент, вызвавший потребность в сообщении. Например, большинство веб-приложений отображают сообщения об ошибках прямо на странице, а не в модальном диалоговом окне.   -  person CommonsWare    schedule 01.06.2011


Ответы (2)


Я только что нашел ответ. После создания DialogFragment мы можем получить его диалог

Dialog dialog = getDialog();

if( null!= dialog)
{
   dialog.setOnKeyListener(new OnKeyListener()
{

        @Override
    public boolean onKey ( DialogInterface dialog , int keyCode , KeyEvent event )
    {
        // disable search button action
        if (keyCode == KeyEvent.KEYCODE_SEARCH)
        {
            return true;
        }
        return false;
    }
});
}
person Hoochwo    schedule 21.11.2011
comment
DialogFragment НЕ является диалоговым окном и НЕ имеет setOnKeyListener. - person User; 12.01.2014
comment
@Ixx Но он содержит диалог, поэтому ответ, который я дал, решает проблему. Ваш комментарий совершенно неуместен. - person Hoochwo; 13.01.2014
comment
К вашему сведению, это правильный ответ. Спасибо Hoochwo за эту технику. Google должен был сделать так, чтобы onCancel возвращал значение true/false, чтобы увидеть, следует ли его отменить/отклонить, вместо того, чтобы просто иметь метод, который позволяет узнать, что фрагмент диалога был отменен с помощью кнопки «Назад» :-P - person kenyee; 05.01.2017

getFragmentManager().popBackStack();

Надеюсь это поможет!

person Nathan Schwermann    schedule 01.06.2011
comment
@Hoochwo, пока кнопка не будет нажата? то есть им нужно удерживать кнопку, чтобы просмотреть диалог? - person Nathan Schwermann; 02.06.2011
comment
@Hoochwo выглядит как ошибка, я думаю, то, что вы делаете, должно работать. В качестве временного исправления я бы предложил переопределить onKeyDown в действии контейнера, чтобы кнопка «Назад» не работала, если вы выполните findFragmentById и найдете его экземпляр вашего диалогового окна. - person Nathan Schwermann; 05.06.2011