我实际上是一名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(原生方法)
答案 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
});
希望这会有所帮助