Как отобразить приложение Dialog на Android, когда я долго нажимаю на элемент в GridView? - PullRequest
1 голос
/ 06 июля 2011

Я пытаюсь отобразить диалог, когда долго нажимаю на элемент в моем GridView.Я пробовал это, но это бросает ошибки.Я не очень понимаю, как использовать OnItemLongClickListener и почему он возвращает логическое значение.Может кто-нибудь, пожалуйста, помогите мне понять это больше и выяснить, как отобразить это диалоговое окно.

 gridView.setOnItemLongClickListener(new OnItemLongClickListener() {
        public boolean onItemLongClick(AdapterView<?> parent, View v,
          int position, long id) {
             FavoriteViewDialog dialog = 
                     new FavoriteViewDialog(FavoriteView.this, null, null);         
            dialog.show();
            return true;
        }
 });

Спасибо.

Ошибка, которую он выдает, ...

Ответы [ 2 ]

0 голосов
/ 06 июля 2011

Обычно WindowManager $ BadTokenException связан с контекстом.

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

И, как правило, этого можно избежать, используя getApplicationContext для вашего диалога вместо SomeActivity.this

0 голосов
/ 06 июля 2011

Попробуйте использовать метод Activity для showDialog (int i), чтобы отобразить диалоговое окно: http://developer.android.com/guide/topics/ui/dialogs.html

Лучший способ определить методы обратного вызова onCreateDialog (int) и onPrepareDialog (int, Dialog) - это оператор switch, который проверяет параметр id, передаваемый в метод ...

static final int DIALOG_PAUSED_ID = 0;
static final int DIALOG_GAMEOVER_ID = 1;

Затем определите обратный вызов onCreateDialog (int) с регистром переключения для каждого идентификатора:

protected Dialog onCreateDialog(int id) {
    Dialog dialog;
    switch(id) {
    case DIALOG_PAUSED_ID:
        // do the work to define the pause Dialog
        break;
    case DIALOG_GAMEOVER_ID:
        // do the work to define the game over Dialog
        break;
    default:
        dialog = null;
    }
    return dialog;
}

Примечание. В этом примере код внутри операторов case отсутствует, поскольку процедура определения вашего диалога выходит за рамки этого раздела. См. Ниже раздел «Создание AlertDialog», предлагающий код, подходящий для этого примера.

Затем позвоните showDialog(DIALOG_PAUSED_ID); //or another int representing a Dialog.

...