使用Android osmdroid / osmbonuspack时:
如何在加载地图时显示进度对话框(或微调框)? 它应该在我将所有项目都放在地图上时完成。
答案 0 :(得分:1)
您可以创建自己的活动,例如this 然后只需在onCreate中启动进度对话框,并在初始化地图时停止它。
答案 1 :(得分:-1)
这个答案是唯一的!构建UI需要相当长的时间。然后,您可以显示一个临时弹出窗口,指示工作正在进行中。
我的第一个猜测当然是使用RelativeLayout在Layout文件中添加ProgressBar。构建具有许多属性的OSM映射,禁止显示ProgressBar。
通常情况下,如果在后台完成繁重的工作,ProgressBar或类似的东西只能正常工作。唉,因为第三方包裹不可能。
在我的情况下,我使用OsmBonusPack(OSM地图),我必须在地图上绘制许多项目。
现在显示地图的构建正在进行中,您可以执行以下(通用)技巧:
步骤1:制作一个扩展DialogFragment的MessageDialog(显示一条消息):
public class MessageDialog extends DialogFragment {
ProgressDialog mDialog = null;
public MessageDialog () {
}
@Override
public Dialog onCreateDialog(final Bundle savedInstanceState) {
mDialog = new ProgressDialog( getActivity());
this.setStyle( STYLE_NO_TITLE, getTheme());
mDialog.setMessage("Building the map ... ");
mDialog.setCancelable(false);
return mDialog;
}
}
步骤2:当您开始繁重的UI工作时(例如构建地图(上面有许多项目),开始显示MessageDialog,然后等待300msecs左右的短时间在背景中。这将允许消息框出现!
FragmentManager fm = getActivity().getSupportFragmentManager();
myInstance = new MessageDialog ();
myInstance.show( fm, "some_tag");
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground( Void... voids ) {
try { Thread.sleep( 300); } catch( Exception e) {}
return null;
}
@Override
protected void onPostExecute( Void msg) {
// OPTION A:
start navigating to the map screen ... and do there the myInstance.dismiss();
// OPTION B:
do the work on the UI here AND myInstance.dismiss();
}
}.execute();