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;,就沒有上述的異常效果了。