在实际开发中经常会用到showDialog(int id)的方法来展示一个对话框,但是会遇到一个Dialog展示之后下次再show的时候对话框的界面还是上次展示的那个,而不是我们想象的界面。很多时候我们打开一个对话框的时候里面的元素是根据需求变化的,这个时候就遇到刷新对话框的问题。这个时候就需要用到重写onPrepareDialog方法了
现在有两方面需求:
1、对话框的title或者message,这个时候在onPrepareDialog里面加上以下代码就可以:
public void onPrepareDialog(int id, Dialog dialog) {
switch(id) {
case (TIME_DIALOG) :
String string = "";
AlertDialog timeDialog = (AlertDialog)dialog;
timeDialog.setMessage(string);
timeDialog.setTitle(string);
break;
}
}
但是有的时候我们要改变的不仅仅是title和massage,有可能对话框里面的布局是自定义的布局,我们要改变的是自定义布局里面的数据,这个时候我们期望的是每一次打开此对话框都可以重新加载一遍。代码如下:
public void onPrepareDialog(int id, Dialog dialog) {
switch(id) {
case (TIME_DIALOG) :
removeDialog(id);
break;
}
}
这个时候可能会遇到在对话框中调用
removeDialog(ID)报错的情况,解决办法是
case ID: {
final String []citys = getServiceType();
Alert_Dialog dialog = new Alert_Dialog.Builder(NetDataPreferences.this).setTitle(R.string.netdata_adjust_order_service_type).setSingleChoiceItems(citys, getLocation(citys,0, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
try {
dialog.dismiss();
} catch (Exception e) {
// TODO: handle exception
}
}
}).setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
try {
dialog.dismiss();
} catch (Exception e) {
// TODO: handle exception
}
}
}).create();
return dialog;
}
switch(id) {
case (TIME_DIALOG) :
String string = "";
AlertDialog timeDialog = (AlertDialog)dialog;
timeDialog.setMessage(string);
timeDialog.setTitle(string);
break;
}
}
但是有的时候我们要改变的不仅仅是title和massage,有可能对话框里面的布局是自定义的布局,我们要改变的是自定义布局里面的数据,这个时候我们期望的是每一次打开此对话框都可以重新加载一遍。代码如下:
public void onPrepareDialog(int id, Dialog dialog) {
switch(id) {
case (TIME_DIALOG) :
removeDialog(id);
break;
}
}
这个时候可能会遇到在对话框中调用
removeDialog(ID)报错的情况,解决办法是
case ID: {
final String []citys = getServiceType();
Alert_Dialog dialog = new Alert_Dialog.Builder(NetDataPreferences.this).setTitle(R.string.netdata_adjust_order_service_type).setSingleChoiceItems(citys, getLocation(citys,0, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
try {
dialog.dismiss();
} catch (Exception e) {
// TODO: handle exception
}
}
}).setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
try {
dialog.dismiss();
} catch (Exception e) {
// TODO: handle exception
}
}
}).create();
return dialog;
}