的Android osmdroid/osmbonuspack - 显示进度微调,同时加载地图
问题描述:
当采用Android osmdroid/osmbonuspack:的Android osmdroid/osmbonuspack - 显示进度微调,同时加载地图
我怎样才能显示一个进度对话框(或微调),同时加载地图? 当我将所有物品放在地图上时,它应该完成。
答
这个答案是唯一的!在构建UI时需要相当长的时间。然后,您可能会显示一个临时弹出窗口,指示正在进行工作。
我的第一个猜测当然是使用RelativeLayout在布局文件中添加一个ProgressBar。使用许多禁止显示ProgressBar的属性来构建OSM地图。
通常情况下,ProgressBar或类似的东西只有在繁重的工作在后台完成时才能正常工作。唉,由于第三方软件包而无法实现。
在我的情况下,我使用OsmBonusPack(OSM地图),我必须在地图上绘制许多项目。
现在显示的是地图的建设过程中,你可以做以下的(通用)招:扩展DialogFragment做出MessageDialog(显示信息):
步骤1
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();
当地图初始化时,您是否有监听器或其他东西可以检测到? –
我认为问题是我在UI线程上构建/显示地图。然后什么都不做。正确? – tjm1706
我不这么认为。我个人不使用osmdroid,但我认为它与该线程无关。看看我的答案,您可以构建自己的自定义侦听器,并能够捕捉到您的地图初始化的时刻。 –