Ami*_*mit 7 android android-dialog android-activity
我的问题类似于这个2岁的问题,我只是发布相同的问题来获得更新的答案,因为很多事情在两年内发生了变化.
我正在开发一个GingerBread +设备的应用程序,我有很多活动,在后台我收到服务器的一些数据.现在基于该数据在某些情况下我需要向Dialog用户显示一个.问题是我如何知道当前最活跃的活动?
我试过,
我曾试图给getApplicationContext()而Dialog创作,但是不工作.抛出一些例外.
一个办法 ?(我真的讨厌它),
一个解决方案可能是通过在Application类中使用变量并在onResume()每个活动上设置它来跟踪当前可见的活动.如果他们有更明智的方法来实现这一点,我真的不想做这本书,我相信他们是更明智的方法来实现这一目标,
我的简单问题是,
如何在当前可见活动上显示对话框?,所以我可以提供对AlertDialog.Builder的引用,我认为这将完成我的工作.如果不是我怎么能在最顶层的Activity上显示一个对话框?
编辑,我使用以下代码私有View.OnClickListener创建一个简单的对话框cancelClickListener = new OnClickListener(){
@Override
public void onClick(View v) {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
LoginActivity.this);
// set title
alertDialogBuilder.setTitle("Roobroo will exit..");
// set dialog message
alertDialogBuilder
.setMessage("Are you sure you want to exit ?")
.setCancelable(false)
.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
// if this button is clicked, close
// current activity
LoginActivity.this.finish();
}
})
.setNegativeButton("No",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
// if this button is clicked, just close
// the dialog box and do nothing
dialog.cancel();
}
});
// create alert dialog
AlertDialog alertDialog = alertDialogBuilder.create();
// show it
alertDialog.show();
// TODO Write the code to exit from the app, (gracefull exit)
Log.i(LOG_CAT, "Cancel Button is clicked");
}
};
Run Code Online (Sandbox Code Playgroud)
使用AlertDialog.Builder的异常 alertDialogBuilder = new AlertDialog.Builder(getApplicationContext()); 给我以下例外,
06-11 14:09:16.732: E/AndroidRuntime(1005): FATAL EXCEPTION: main
06-11 14:09:16.732: E/AndroidRuntime(1005): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
06-11 14:09:16.732: E/AndroidRuntime(1005): at android.view.ViewRoot.setView(ViewRoot.java:531)
06-11 14:09:16.732: E/AndroidRuntime(1005): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
06-11 14:09:16.732: E/AndroidRuntime(1005): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
06-11 14:09:16.732: E/AndroidRuntime(1005): at android.app.Dialog.show(Dialog.java:241)
06-11 14:09:16.732: E/AndroidRuntime(1005): at com.mycompany.myapp.activities.LoginActivity$3.onClick(LoginActivity.java:127)
06-11 14:09:16.732: E/AndroidRuntime(1005): at android.view.View.performClick(View.java:2485)
06-11 14:09:16.732: E/AndroidRuntime(1005): at android.view.View$PerformClick.run(View.java:9080)
06-11 14:09:16.732: E/AndroidRuntime(1005): at android.os.Handler.handleCallback(Handler.java:587)
06-11 14:09:16.732: E/AndroidRuntime(1005): at android.os.Handler.dispatchMessage(Handler.java:92)
06-11 14:09:16.732: E/AndroidRuntime(1005): at android.os.Looper.loop(Looper.java:123)
06-11 14:09:16.732: E/AndroidRuntime(1005): at android.app.ActivityThread.main(ActivityThread.java:3683)
06-11 14:09:16.732: E/AndroidRuntime(1005): at java.lang.reflect.Method.invokeNative(Native Method)
06-11 14:09:16.732: E/AndroidRuntime(1005): at java.lang.reflect.Method.invoke(Method.java:507)
06-11 14:09:16.732: E/AndroidRuntime(1005): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
06-11 14:09:16.732: E/AndroidRuntime(1005): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
06-11 14:09:16.732: E/AndroidRuntime(1005): at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)
试试这个,如果它可以帮助你:
1.创建一个Activity具有transparent theme and no title.
2.在onCreate()定义alert dialog.
3.从broadcastReceiver开始此活动将显示alert dialog.
| 归档时间: |
|
| 查看次数: |
7590 次 |
| 最近记录: |