2016-04-22 4 views
1

Laden Bei der Verwendung von Android osmdroid/osmbonuspack:Android osmdroid/osmbonuspack - Show Fortschritt Spinner, während eine Karte

Wie kann ich einen Fortschrittsdialog zeigen (oder eine Schleuder), während die Karte geladen? Es sollte beendet werden, wenn ich auch alle Elemente auf die Karte stelle.

+0

Haben Sie einen Listener oder etwas zu erkennen, wenn die Karte initialisiert wird? –

+0

Ich denke, das Problem ist, dass ich die Karte im UI-Thread baue/zeige. Dann wird nichts gemacht. Richtig? – tjm1706

+0

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. –

Antwort

-1

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(); 
1

Sie können Ihr eigenes Ereignis wie this erstellen.
Dann starten Sie einfach Ihr Fortschrittsdialog in Ihrem onCreate und stoppen Sie es, wenn Ihre Karte initialisiert wird.