Diese Antwort ist NUR !!! nützlich beim Erstellen der Benutzeroberfläche dauert ziemlich viel Zeit. Dann können Sie ein temporäres Popup anzeigen, das anzeigt, dass gerade gearbeitet wird.
Meine erste Schätzung war natürlich Hinzufügen einer ProgressBar in der Layout-Datei mit einem RelativeLayout. Der Aufbau der OSM-Karte mit vielen Attributen ist mit der ProgressBar nicht möglich.
Normalerweise funktioniert eine Fortschrittsbalken oder etwas Ähnliches nur korrekt, wenn die schwere Arbeit im Hintergrund ausgeführt wird. Leider nicht möglich wegen eines Drittanbieter-Pakets.
In meinem Fall verwende ich den OsmBonusPack (OSM-Karte) und ich muss viele Elemente auf der Karte plotten.
Jetzt zeigt, dass das Gebäude von der Karte im Gang ist, dass Sie den folgenden (universal) Trick tun können:
Schritt 1: MessageDialog macht (eine Meldung angezeigt), die DialogFragment erweitert:
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;
}
}
Schritt 2: Wenn Sie mit der Arbeit mit der Benutzeroberfläche beginnen (zB mit der Erstellung der Karte), beginnen Sie mit dem Anzeigen des MessageDialogs und warten Sie dann eine kurze Zeit wie 300ms im Hintergrund. Dadurch wird das Meldungsfenster angezeigt!
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();
Haben Sie einen Listener oder etwas zu erkennen, wenn die Karte initialisiert wird? –
Ich denke, das Problem ist, dass ich die Karte im UI-Thread baue/zeige. Dann wird nichts gemacht. Richtig? – tjm1706
Ich glaube nicht. Ich benutze personnally nicht osmdroid, aber ich denke, es hat nichts mit dem Thread zu tun. Sehen Sie sich meine Antwort an, Sie können Ihren eigenen benutzerdefinierten Listener erstellen und den Moment abhören, in dem Ihre Karte initialisiert wird. –