ProgressDialog pd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
pd = new ProgressDialog(this,ProgressDialog.THEME_HOLO_LIGHT);
}
public void showWaitDialog(String msg,
android.content.DialogInterface.OnClickListener lis) {
tempLis = lis;
if (lis != null) {
pd.setButton(DialogInterface.BUTTON_NEGATIVE, "取消", mCancelLis);
}
pd.setMessage(msg);
pd.setCancelable(true);
pd.show();
}
public void showWaitDialog(String msg) {
if(pd.getButton(DialogInterface.BUTTON_NEGATIVE) !=null){
// pd.getButton(DialogInterface.BUTTON_NEGATIVE).setVisibility(View.GONE); //异常效果
ViewParent parent = pd.getButton(DialogInterface.BUTTON_NEGATIVE)
.getParent().getParent();
LinearLayout layout = (LinearLayout) parent;
layout.setVisibility(View.GONE);
}
showWaitDialog(msg, null);
}
public void showDialog(View v){
switch (v.getId()) {
case R.id.button1:
showWaitDialog("正在加载。。。");
break;
case R.id.button2:
showWaitDialog("出现异常,请重新加载", "确定", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
cancleWaitDialog();
}
});
break;
default:
break;
}
}
正常效果:
需要按钮的时候就pb.setButton()增加一个,不需要按钮只需要显示信息的时候就把按钮隐藏。
异常效果:
pd.getButton(DialogInterface.BUTTON_NEGATIVE).setVisibility(View.GONE);
当我这样隐藏那个确认按钮,然后再次只显示信息,发现按钮那里并没有消失只是变成了空白,很明显button外面应该嵌套了一层或几层布局。
知道原因了,现在只需要确认button的第几层父布局和显示信息的父布局是同级的。
在eclipse中打开Open Perspective-------------->>Hierarchy View
然后连接手机后,打开异常效果界面,现在我们就看到这个ProgressDialog的布局树
然后发现下面id/button2 就是确认按钮,button上面还有两层LinearLayout,第二层和显示信息的是同级的,所以把第二层LinearLayout隐藏就行了,代码如下:
ViewParent parent = pd.getButton(DialogInterface.BUTTON_NEGATIVE)
.getParent().getParent();
LinearLayout layout = (LinearLayout) parent;
layout.setVisibility(View.GONE);
注意:ProgressDialog 我只new了一次,所以要隐藏按钮实现效果,如果你每次显示都new,取消的时候都把pd = null;,就没有上述的异常效果了。