0

私のアプリでは、非アクティビティ クラスからのカスタム ダイアログを表示しています。動作しますが、次の理由でクラッシュすることはめったにありません。

android.view.windowmanager Bad TokenException:unable to add window-
token android.os.binderproxy@2afac69d8 is not valid;is your activity running?

私のコーディング構造:

 MainActivity.java(Activity class)

 public class MainActivity extends TabActivity {
    @Override
     public void onCreate(Bundle savedInstanceState)
      {
        super.onCreate(savedInstanceState);
            ........
            UpdateClass obj = new UpdateClass(MainActivity.this);
            obj.checkUpdate(); 
      }
 }

UpdateClass.java (非アクティビティ クラス)

public class UpdateClass{

UpdateClass(MainActivity mainActivity ){
  this.context = mainActivity;
}

checkUpdate(){

    dialog_Update = new Dialog(context);
    ...
    updateButton.setOnClickListener(new OnClickListener() {
        public void onClick(View arg0) {
        ....
        }
    });
    cancelButton.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            dialog_Update.dismiss();
        }
    });

    dialog_Update.show();  
   ......               
 } 
} 
4

1 に答える 1

0

以下のように実装してみてください:

public class MainActivity extends TabActivity {
@Override
 private Context context;
 public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
        ........
      context=MainActivity.this;
        UpdateClass obj = new UpdateClass(context);
        obj.checkUpdate(); 
  }

}

で以下のように変更しますUpdateClassMainActivityin コンストラクターを渡す代わりに、次のように渡しActivityます。

public class UpdateClass{
    pdateClass(Activity mainActivity ){ <----Pass the activity here.
    this.context = mainActivity;
  }
     ......               
  } 
 } 
于 2013-01-16T12:56:48.463 に答える