开发过程中,需要弹出对话框的时候,我们大多数都是使用dialog,而大多数都是使用builder,问题就在于builder初始化过程中需要上下文内容,这就造成如果程序中同时有多个Activity显示时,你必须获取当前顶层的Activity,获取顶层的activity有三种方法,第一种:通过标志位,每一个activity设置一个数字,当onResume时修改标志位,根据标志位获取当前顶层的activity,第二种:获取当前的view,进而获取顶层activity,这种方法我没有实现,第三种:我替换第一种方法,现在使用的,设置一个透明的activity,然后当需要弹出对话框的时候,先启动透明的activity,然后再通过hander发送消息,启动dialog,当然dialog的上下文内容就是透明的activity,当关闭dialog时候,同时也要关闭activity,这就用户也察觉不到,同时dialog也会置顶。
下面时第三种方法的代码:
DialogActivity.java透明的activity
import com.wificar.util.Android_Exit;
import com.wificar.util.WificarVar;
import
android.app.Activity;
import android.os.Bundle;
import android.os.Message;
import android.view.Window;
import android.widget.RelativeLayout;
public class DialogActivity extends Activity{
RelativeLayout parentLayout;
public static DialogActivity INSTANCE = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
parentLayout = new RelativeLayout(this);
RelativeLayout.LayoutParams parentLayoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.FILL_PARENT);
setContentView(parentLayout, parentLayoutParams);
INSTANCE = this;
Android_Exit.getInstance().addActivity(this); //tianjia
switch (WificarVar.dialogFlag) {
case 0://alarm dialog
Message shootpre = new Message();
shootpre.what = WificarActivity.MESSAGE_SHOWALAEMDIALOG;
WificarActivity.getInstance().getHandler().sendMessage(shootpre);
shootpre = null;
break;
case 1://ping dialog
Message ping = new Message();
ping.what = WificarActivity.MESSAGE_PING_FAIL;
WificarActivity.getInstance().getHandler().sendMessage(ping);
break;
default:
break;
}
}
@Override
protected void onStop() {
super.onStop();
try {
if (INSTANCE != null) {
killSelf();
}
} catch (Exception e) {
}
}
public void killSelf(){
finish();
INSTANCE = null;
}
}
在需要弹出对话框的地方
dialogFlag = 0;
Intent intent = new Intent();
intent.setClass(main.this, DialogActivity.class);
startActivity(intent);
透明activity的实现见我之前写的
android设置Activity背景色为透明的2种方法