Вопрос по android – Показывать диалог, используя только контекст вместо экземпляра действия

1

Я мог бы показать диалоговое окно, если я использую экземпляр Activity, но когда я использую экземпляр Context или Application Context, диалог не отображается.

<code>AlertDialog.Builder builder = new AlertDialog.Builder(activity);
            builder.setTitle(title);
            builder.setMessage(msg);

            if (null != positiveLabel) {
                builder.setPositiveButton(positiveLabel, new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                        dialog.cancel();
                        if (null != listener) {
                            listener.onOk();
                        }
                    }
                });
            }

            if (null != negativeLable) {
                builder.setNegativeButton(negativeLable, new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                        dialog.cancel();
                        if (null != listener) {
                            listener.onCancel();
                        }
                    }
                });
            }

            builder.create().show();
</code>

Можете ли вы дать мне решение для отображения диалогов без использования экземпляра Activity

Откуда ты это показываешь? MByD

Ваш Ответ

3   ответа
0

По какой-то причине [по крайней мере в Android 2.1] тост может быть в контексте приложения, но не в диалоге прогресса

MyActivity.this - это специфический контекст действия, который не падает

MyActivity.getApplicationContext () является глобальным и будет вызывать сбои индикаторов выполнения, а в более поздних версиях также будет отображаться тосты.

22

Это один изMOST важные вещи, которые вы всегда должны помнить о контекстах. Есть 2 типа контекстов,Activity contexts а такжеApplication contexts, Вы будете наблюдать во многих классах, связанных с пользовательским интерфейсом, передается контекст. Это не контекст приложения! В таких случаях вы всегда должны передавать Контекст деятельности. За исключениемToastНикакой другой компонент пользовательского интерфейса не будет работать с контекстом приложения.

Контекст приложения всегда передается, когда вам нужна какая-то услуга или компонент, связанный с приложением, например, диспетчер телефонии, диспетчер местоположения и т. Д.

Для пользовательских интерфейсов вы всегда должны передавать контекст, связанный с пользовательским интерфейсом, который представляет собой действие.

6

вы не можете создать диалоговое окно без экземпляра активности. Вызов getApplicationContext () тоже не работает. То, как я это сделал, - это вызвать метод, который создает диалог из действия, и передать «this». то есть ссылка на эту деятельность в качестве параметра.

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

Вау, это отличная идея. Спасибо omermuhammed я сделаю то же самое Abilash
Это бы сработало, но в таком случае почему бы вам не выполнить какое-либо действие и просто сделать его похожим на диалог? Это можно сделать, добавив его в файл манифеста & lt; Activity android: theme = & quot; @android: style / Theme.Dialog & quot; / & GT; & Quot;
Спасибо за ваши предложения. Я также делаю то же самое в моем приложении для других случаев. В моем текущем сценарии я использую AccessibilityService, который не зависит от других вызовов активности. Теперь у меня появилась идея запустить прозрачную активность, которая показывает диалог при запуске и завершает работу при закрытии диалога. Пожалуйста, дайте мне знать, это хорошая идея? Abilash

Похожие вопросы