SORU
30 NİSAN 2010, Cuma


java.lang.Sınıftır: Görünüm pencere yöneticisi ve ona bağlı

AsyncTask başlayan bir aktivite var ve ilerleme işlem süresi için iletişim gösterir. Etkinlik dönüşü veya klavye ile yeniden ilan etti.

    <activity android:name=".MyActivity" 
              android:label="@string/app_name"
              android:configChanges="keyboardHidden|orientation"
              >
        <intent-filter>
        </intent-filter>
    </activity>

Görev tamamlandığında, bir iletişim ben dissmiss, ama bazı telefonlar (çerçeve: 1.5, 1.6) böyle bir hata atılır:

java.lang.IllegalArgumentException: View not attached to window manager
    at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:356)
    at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:201)
    at android.view.Window$LocalWindowManager.removeView(Window.java:400)
    at android.app.Dialog.dismissDialog(Dialog.java:268)
    at android.app.Dialog.access$000(Dialog.java:69)
    at android.app.Dialog$1.run(Dialog.java:103)
    at android.app.Dialog.dismiss(Dialog.java:252)
    at xxx.onPostExecute(xxx$1.java:xxx)

Benim kod:

final Dialog dialog = new AlertDialog.Builder(context)
    .setTitle("Processing...")
    .setCancelable(true)
    .create();

final AsyncTask<MyParams, Object, MyResult> task = new AsyncTask<MyParams, Object, MyResult>() {

    @Override
    protected MyResult doInBackground(MyParams... params) {
        // Long operation goes here
    }

    @Override
    protected void onPostExecute(MyResult result) {
        dialog.dismiss();
        onCompletion(result);
    }
};

task.execute(...);

dialog.setOnCancelListener(new OnCancelListener() {
    @Override
    public void onCancel(DialogInterface arg0) {
        task.cancel(false);
    }
});

dialog.show();

(http://bend-ing.blogspot.com/2008/11/properly-handle-progress-dialog-in.html) ve Android kaynaklarında görülen okudum ne kadar özel etkinlik yok olduğunda bu sadece olası bir durum gibi görünüyor. Fakat daha önce de belirttiğim gibi, temel etkinlikler için etkinlik Rekreasyon yasaklıyorum.

Herhangi bir öneriniz çok takdir.

CEVAP
24 ŞUBAT 2011, PERŞEMBE


Ben de bu hatabazenben iletişim kutusunu kapatmak ve onPostExecute metodu etkinliği bitirmek. Bazen aktivite iletişim başarılı bir şekilde kapatılır, önce bitmiş olur sanırım.

Basit, benim için çalışan etkili bir çözüm henüz

@Override
protected void onPostExecute(MyResult result) {
    try {
        if ((this.mDialog != null) && this.mDialog.isShowing()) {
            this.mDialog.dismiss();
        }
    } catch (final IllegalArgumentException e) {
        // Handle or log or ignore
    } catch (final Exception e) {
        // Handle or log or ignore
    } finally {
        this.mDialog = null;
    }  
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Liberator

    Liberator

    14 EYLÜL 2007
  • Sparta Spartanutul

    Sparta Spart

    18 HAZİRAN 2013
  • Wronchi Animation

    Wronchi Anim

    9 Mayıs 2011