在Android中预先创建对话框可以吗?

时间:2019-03-08 16:43:12

标签: android

在我的应用程序中有几种情况,我使用DialogBu​​ilder创建和显示具有不同xml布局的alertdialog。

我的大多数对话框都很简单-仅包含时间选择器或数字选择器等。 它们被创建并快速显示。

但是其中一个对话框包含MapView。 而且建设和展示绝对比其他人慢。 我想这是因为地图。

所以我想知道这是否是在android ro中的好习惯,它是在创建活动之后立即预创建对话框,稍后再显示它。

预先感谢

------编辑-添加了源代码-------

每次我点击布局上的一个元素时,我都会创建一个相应的对话框,如下所示:

AlertDialog.Builder builder = new AlertDialog.Builder(mActivity);
LayoutInflater inflater = activity.getLayoutInflater();
final View view = inflater.inflate(R.layout.dialog_XXXX, null);
builder.setView(view);
.....
.....
AlertDialog dialog = builder.create();
builder.show();

mActivity.showProgressDialog(getString(R.string.loading));

在这里有mapview的对话框,我有以下内容:

final MapView mapView = view.findViewById(R.id.mapView);
mapView.onCreate(dialog.onSaveInstanceState());
mapView.onResume();// needed to get the map to display immediately

mapView.getMapAsync(new OnMapReadyCallback() {
   @Override
   public void onMapReady(GoogleMap googleMap) {
      mGoogleMap = googleMap;
      mGoogleMap.setMinZoomPreference(12);                            
      mGoogleMap.getUiSettings().setZoomControlsEnabled(true);                            
      mGoogleMap.moveCamera(CameraUpdateFactory.newLatLng(xxxx,yyyyy));
      mActivity.hideProgressDialog();
   }
});

,在显示带有mapview的对话框之前会有一段时间。 而我尝试显示的进度对话框根本没有显示。

所以我想知道如果我在创建活动之后立即创建对话框,然后 将其分配给成员变量(mDialog):

AlertDialog.Builder builder = new AlertDialog.Builder(mActivity);
LayoutInflater inflater = activity.getLayoutInflater();
final View view = inflater.inflate(R.layout.dialog_XXXX, null);
builder.setView(view);
.....
.....
mDialog = builder.create();

然后在UI上单击仅显示预创建的对话框:     mDialog.show();

但是我不知道这是一个好习惯。 是否有理由不预先创建对话框并将实例存储在活动(或片段)的成员变量中,而仅在以后需要时显示它们。

1 个答案:

答案 0 :(得分:1)

是的。只需确保预先创建对话框不会减慢您的活动创建速度即可。