Ошибка WindowLeaked при отображении PopupWindow - PullRequest
0 голосов
/ 26 февраля 2012

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

Вот код, который я вызвал из функции onPause () моей Деятельности.

`

`protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        new DialogueTask().execute(this);   
        }

А реализация задачи класса Диалог -

class DialogueTask extends AsyncTask<Activity, Void, PopupWindow> {
    private View layout;

    @Override
    protected PopupWindow doInBackground(Activity... activities) {
        LayoutInflater layoutInflater = (LayoutInflater) activities[0]
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        layout = layoutInflater.inflate(R.layout.popup,
                (ViewGroup) activities[0].findViewById(R.id.popup_id));
        PopupWindow pw;
        pw = new PopupWindow(layout, 100, 100, true);
        return pw;
    }

    @Override
    protected void onPostExecute(PopupWindow pw) {
        // TODO Auto-generated method stub
        pw.showAtLocation(layout, Gravity.CENTER, 0, 0);
    }

Это popup.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/popup_id"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="Sure you want to Quit?" >
    </TextView>


</LinearLayout>

При нажатии кнопки назад вызывается onPause (), и это дает исключение WindowLeaked. Я думаю, я позаботился о том, чтобы всплывающее окно отображалось в потоке пользовательского интерфейса путем реализации AsyncTask. Тогда где может быть проблема?

1 Ответ

0 голосов
/ 26 февраля 2012

Действие всплывающего окна открывается из основного действия, и вы выходите из основного действия, не отменяя действие всплывающего окна. pw.dismiss () после pw.showAtLocation (макет, Gravity.CENTER, 0, 0) решит проблему

@Override
protected void onPostExecute(PopupWindow pw) {
    // TODO Auto-generated method stub
    pw.showAtLocation(layout, Gravity.CENTER, 0, 0);
    pw.dismiss();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...