活动不等待警报对话框

时间:2014-01-31 00:51:35

标签: android alertdialog

我实际上是一名C#开发人员,但目前正在开发一个带有java的android应用程序。

好吧,我想创建一个通用对话框警报类,并且有一个静态方法,该方法被赋予标题,消息作为参数并显示警报。似乎一切都好。这是我的班级..

public class AlertDialogHelper  {

public static void setOkMessage(Context context,String title,String message)
{

    AlertDialog dialog = new AlertDialog.Builder(context).create();
    dialog.setTitle(title);
    dialog.setMessage(message);
    dialog.setButton("OK", new DialogInterface.OnClickListener()  {

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

             // NOTHING??

        }
    });     

    dialog.setIcon(R.drawable.logo);
    dialog.show();
 }
}

我在我的splashactivity中调用了这个静态方法,但是当出现警告对话框时,代码进行后意味着执行以下代码..

private void closeSplashActivity() {

 Intent activity;
 boolean isNew=true;

  try{

    DbHelper dbHelper = new DbHelper(this);
    dbHelper.openDbConnection();
    isNew = dbHelper.getSettings(DbContext.COLUMN_ISNEW);
    dbHelper.closeDbConnection();

   if (isNew)
   AlertDialogHelper.setOkMessage(this, "XXX", "YYYY");

   else
       AlertDialogHelper.setOkMessage(this, "XXXXX", "YYYYY");



 } catch (Exception ex) {

AlertDialogHelper.setOkMessage(this, "Error", "XXXXX:" + ex.getMessage());
        ex.printStackTrace();
 }

   if(isNew) 
   activity = new Intent(SplashActivity.this, ChooseQualityActivity.class); 

   else 
   activity = new Intent(SplashActivity.this, HomeActivity.class);

   startActivity(activity);
   finish();

 }

通常,它必须等待onclick事件,然后等待

    if(isNew) 
   activity = new Intent(SplashActivity.this, ChooseQualityActivity.class);

必须工作..但是,它不会等待并运行上面的代码..所以,我不知道我能为它做什么..还有另一种方法来创建一般对话框?因为它看起来为每条消息创建了很长的代码。

@Edit ..

我刚刚意识到logcat中的一些异常

  

01-30 23:07:47.375:E / WindowManager(9191):活动   com.aaa.bbbb.SplashActivity泄露了窗口   com.android.internal.policy.impl.PhoneWindow $ {DecorView 2c12e008   V.E ..... R ..... ID 0,0-348,285}最初在这里添加01-30   23:07:47.375:E / WindowManager(9191):android.view.WindowLeaked:   活动com.aaa.bbbb.SplashActivity已泄露窗口   com.android.internal.policy.impl.PhoneWindow $ {DecorView 2c12e008   V.E ..... R ..... ID 0,0-348,285}最初在这里添加01-30   23:07:47.375:E / WindowManager(9191):at   android.view.ViewRootImpl。(ViewRootImpl.java:354)01-30   23:07:47.375:E / WindowManager(9191):at   android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:216)   01-30 23:07:47.375:E / WindowManager(9191):at   android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)   01-30 23:07:47.375:E / WindowManager(9191):at   android.app.Dialog.show(Dialog.java:281)01-30 23:07:47.375:   E / WindowManager(9191):at   com.aaa.bbbb.utility.AlertDialogHelper.setOkMessage(AlertDialogHelper.java:31)   01-30 23:07:47.375:E / WindowManager(9191):at   com.aaa.bbbb.SplashActivity.closeSplashActivity(SplashActivity.java:65)   01-30 23:07:47.375:E / WindowManager(9191):at   com.aaa.bbbb.SplashActivity.access $ 0(SplashActivity.java:53)01-30   23:07:47.375:E / WindowManager(9191):at   com.aaa.bbbb.SplashActivity $ 1.onCompletion(SplashActivity.java:40)   01-30 23:07:47.375:E / WindowManager(9191):at   android.media.MediaPlayer $ EventHandler.handleMessage(MediaPlayer.java:1980)   01-30 23:07:47.375:E / WindowManager(9191):at   android.os.Handler.dispatchMessage(Handler.java:99)01-30   23:07:47.375:E / WindowManager(9191):at   android.os.Looper.loop(Looper.java:137)01-30 23:07:47.375:   E / WindowManager(9191):at   android.app.ActivityThread.main(ActivityThread.java:5039)01-30   23:07:47.375:E / WindowManager(9191):at   java.lang.reflect.Method.invokeNative(Native Method)01-30   23:07:47.375:E / WindowManager(9191):at   java.lang.reflect.Method.invoke(Method.java:511)01-30 23:07:47.375:   E / WindowManager(9191):at   com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793)   01-30 23:07:47.375:E / WindowManager(9191):at   com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)01-30   23:07:47.375:E / WindowManager(9191):at   dalvik.system.NativeStart.main(原生方法)

1 个答案:

答案 0 :(得分:1)

好的,首先你必须定义一个这样的界面:

interface MyCallback {
    void callbackCall();
}

然后在你的AlertDialogHelper类中包含一个成员,如下所示:

MyCallback mCallback;

我的设置OkMessageMethod添加参数

public static void setOkMessage(Context context,String title,String message, MyCallback callback) {
mCallback = callback

稍后在onClick方法中你会这样调用:

callback.callbackCall();

其余的很简单,只需这样调用setOkMessage:

AlertDialogHelper.setOkMessage(this, "Error", "XXXXX:" + ex.getMessage(), new MyCallback(){
 // Here the code you want to execute after the click event
});

希望这会有所帮助