在Android中显示一个Dialog,为了性能更优化,会遵循这样一个机制。现在缓存中查找是否有包含该DialogID的对话框,如果有的话直接调用;反之就重新创建一个。
该方法对于性能优化比较有用,但是对于我们每次显示对话框都要求显示不同内容的需求来说就有点麻烦了。
方法就是在创建这个Dialog之前先将他从缓存中移除。如下:
switch(id) { case DIALOG_OPERATION_MENU: return new AlertDialog.Builder(this).setTitle("操作") .setIcon(R.drawable.ic_launcher) .setItems(R.array.operation_menu, ocl).create(); //重命名文件 case DIALOG_RENAME: return new AlertDialog.Builder(this).setTitle("重命名") .setView(mRename).setPositiveButton("确定", ocl) .setNegativeButton("取消", ocl).create(); //分享文件 case DIALOG_SHARE: shareAPK(); break; //显示详情 case DIALOG_DETAIL: return showFileDetail(); } return null; }
这里面都是显示一个Dialog,在显示每个Dialog方法前都会调用onPrepareDialog方法。我们就重写这个方法,从缓存中移除该dialog,如下:
protected void onPrepareDialog(int id, Dialog dialog) { // TODO Auto-generated method stub switch(id) { case DIALOG_OPERATION_MENU: case DIALOG_RENAME: case DIALOG_SHARE: case DIALOG_DETAIL: removeDialog(id); break; } super.onPrepareDialog(id, dialog); }
这样每次显示新的Dialog都会调用onPrepareDialog,都会从缓存中删除该Dialog。这样就会重新运行一遍创建Dialog的流程,这样我们写在创建Dialog中的代码就会起作用。