我的应用程序中有一个相当简单的片段,它有两个edittext字段(地址输入)和一个MapView。加载片段后,它会冻结一小段时间 - 显然是在加载/膨胀或初始化MapView时。
在片段的onCreateView中,当前发生以下情况:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_search_place, container, false);
mMapView = (MapView) v.findViewById(R.id.mapview);
mImageContinue = (ImageView) v.findViewById(R.id.img_continue);
mEditFrom = (ClearableEditText) v.findViewById(R.id.clearedit_from);
mEditTo = (ClearableEditText) v.findViewById(R.id.clearedit_to);
mButtonSwitch = (ImageButton) v.findViewById(R.id.btn_swap);
mMapView.onCreate(savedInstanceState);
mMap = mMapView.getMap();
MapsInitializer.initialize(getActivity());
mEditFrom.addTextChangedListener(mEditTextWatcherFrom);
mEditTo.addTextChangedListener(mEditTextWatcherTo);
if(mInteractionListener != null) {
String[] add = mInteractionListener.getAddresses();
if(add != null) {
mEditFrom.setText(add[0]);
mEditTo.setText(add[1]);
}
}
mButtonSwitch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// swap from and to.
String tmp = mEditFrom.getText();
mEditFrom.setText(mEditTo.getText());
mEditTo.setText(tmp);
tmp = null;
}
});
mImageContinue.setOnClickListener(this);
return v;
}
我基本上只是查找我的视图并设置一些监听器,检查父活动(mInteractionListener)是否已经为EditText字段保存了变量 - 并初始化MapView。
是否有一种相当简洁的方法来初始化MapView异步或某处,除了在UI线程上?目前,在提交FragmentTransaction时,UI(尤其是NavigationDrawer)会在短时间内冻结,这看起来并不好看。