[英]Activity is not waiting for alert dialog
I am actually a C# developer but currently developing an app for an android with java. 我实际上是C#开发人员,但目前正在使用Java为Android开发应用程序。
Well,I wanted to create a general dialog alert class and has a static method that is given title,message as parameter and shows an alert. 好吧,我想创建一个通用的对话框警报类,并有一个静态方法,该方法给出标题,消息作为参数并显示警报。 it seems everything OK. 似乎一切正常。 Here is the my class.. 这是我的课..
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();
}
}
and I called this static method in my splashactivity, but when alert dialog appeared, after code is going on that means execute codes below.. 然后在我的启动活动中调用了此静态方法,但是当出现警告对话框时,在执行代码之后,这意味着请执行以下代码。
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();
}
Normally, It must wait for the onclick event and after that 通常,它必须等待onclick事件,之后
if(isNew)
activity = new Intent(SplashActivity.this, ChooseQualityActivity.class);
must work.. but, it doesnt wait and run this code above.. So, I do not know what I can do it for it.. And Is there another method for creating general dialog box? 必须工作..但是,它不会等待并运行上面的代码。.所以,我不知道该怎么做。.还有创建常规对话框的另一种方法吗? Because it looks so long code to create for each message. 因为看起来很长的代码才能为每个消息创建。
@Edit.. @编辑..
I have just realized that some exception in logcat 我刚刚意识到logcat中有一些异常
01-30 23:07:47.375: E/WindowManager(9191): Activity com.aaa.bbbb.SplashActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{2c12e008 VE.... R.....ID 0,0-348,285} that was originally added here 01-30 23:07:47.375: E/WindowManager(9191): android.view.WindowLeaked: Activity com.aaa.bbbb.SplashActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{2c12e008 VE.... R.....ID 0,0-348,285} that was originally added here 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.j 01-30 23:07:47.375:E / WindowManager(9191):活动com.aaa.bbbb.SplashActivity已泄漏窗口com.android.internal.policy.impl.PhoneWindow $ DecorView {2c12e008 VE .... R .. ... ID 0,0-348,285}最初是在此处添加的01-30 23:07:47.375:E / WindowManager(9191):android.view.WindowLeaked:活动com.aaa.bbbb.SplashActivity已泄漏window com。 android.internal.policy.impl.PhoneWindow $ DecorView {2c12e008 VE .... R ..... ID 0,0-348,285}最初是在此处添加的01-30 23:07:47.375:E / WindowManager(9191 ):位于android.view.ViewRootImpl。(ViewRootImpl.java:354)01-30 23:07:47.375:E / WindowManager(9191):位于android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:216)01-30 23:07:47.375:E / WindowManager(9191):在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)01-30 23:07:47.375:E / WindowManager(9191):在android.app.Dialog .show(Dialog.java:281)01-30 23:07:47.375:E / WindowManager(9191):at com.aaa.bbbb.utility.AlertDialogHelper.setOkMessage(AlertDialogHelper.j ava: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. ava:31)01-30 23:07:47.375:E / WindowManager(9191):在com.aaa.bbbb.SplashActivity.closeSplashActivity(SplashActivity.java:65)01-30 23:07:47.375:E / WindowManager( 9191):在com.aaa.bbbb.SplashActivity.access $ 0(SplashActivity.java:53)01-30 23:07:47.375:E / WindowManager(9191):在com.aaa.bbbb.SplashActivity $ 1.onCompletion(SplashActivity .java:40)01-30 23:07:47.375:E / WindowManager(9191):位于android.media.MediaPlayer $ EventHandler.handleMessage(MediaPlayer.java:1980)01-30 23:07:47.375:E / WindowManager (9191):位于android.os.Handler.dispatchMessage(Handler.java:99)01-30 23:07:47.375:E / WindowManager(9191):位于android.os.Looper.loop(Looper.java:137) 01-30 23:07:47.375:E / WindowManager(9191):在android.app.ActivityThread.main(ActivityThread.java:5039)01-30 23:07:47.375:E / WindowManager(9191):在Java lang.reflect.Method.invokeNative(本机方法)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):在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(Native Method) 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):在dalvik.system.NativeStart.main(本机方法)
Ok, first you have to define an interface like this: 好的,首先您必须定义一个这样的接口:
interface MyCallback {
void callbackCall();
}
Then in your AlertDialogHelper class include a member, like this: 然后在AlertDialogHelper类中包含一个成员,如下所示:
MyCallback mCallback;
I your set OkMessageMethod add a parameter 我在您设置的OkMessageMethod中添加一个参数
public static void setOkMessage(Context context,String title,String message, MyCallback callback) {
mCallback = callback
later in onClick method you call like this: 稍后在onClick方法中,您将这样调用:
callback.callbackCall();
the rest is easy, just call the setOkMessage this way: 其余的很简单,只需通过以下方式调用setOkMessage即可:
AlertDialogHelper.setOkMessage(this, "Error", "XXXXX:" + ex.getMessage(), new MyCallback(){
// Here the code you want to execute after the click event
});
hope this helps 希望这可以帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.