在我的应用程序中有几种情况,我使用DialogBuilder创建和显示具有不同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();
但是我不知道这是一个好习惯。 是否有理由不预先创建对话框并将实例存储在活动(或片段)的成员变量中,而仅在以后需要时显示它们。
答案 0 :(得分:1)
是的。只需确保预先创建对话框不会减慢您的活动创建速度即可。