wake-up-neo.com

Beste Möglichkeit, eine Lade- / Fortschrittsanzeige anzuzeigen?

Was ist die beste Methode, um einen Ladespinner anzuzeigen, während die App auf eine Antwort vom Server wartet?

Kann dies programmgesteuert erfolgen? Damit ich den Load-Spinner nicht in die XML-Datei einfügen muss?

138
Jochem Gruter

ProgressDialog ist veraltet von Android Oreo. Verwenden Sie stattdessen ProgressBar

ProgressDialog progress = new ProgressDialog(this);
progress.setTitle("Loading");
progress.setMessage("Wait while loading...");
progress.setCancelable(false); // disable dismiss by tapping outside of the dialog
progress.show();
// To dismiss the dialog
progress.dismiss();

[~ # ~] oder [~ # ~]

ProgressDialog.show(this, "Loading", "Wait while loading...");

Lesen Sie hier mehr.

Übrigens hat Spinner in Android eine andere Bedeutung. (Es ist wie die Auswahlliste in HTML)

286
Suraj Bajaj

Verwenden Sie ProgressDialog

ProgressDialog.show(Context context, CharSequence title, CharSequence message);

enter image description here

Dies wird jedoch heute (2013) als Anti-Pattern angesehen: http://www.youtube.com/watch?v=pEGWcMTxs3I

16
vasart

ProgressDialog ist seit API Level 26 veraltet https://developer.Android.com/reference/Android/app/ProgressDialog.html

Ich füge eine Fortschrittsleiste in mein Layout ein

   <ProgressBar
        Android:layout_weight="1"
        Android:id="@+id/progressBar_cyclic"
        Android:visibility="gone"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:minHeight="40dp"
        Android:minWidth="40dp" />

und ändere seine Sichtbarkeit in .GONE | .VISIBLE je nach Anwendungsfall.

    progressBar_cyclic.visibility = View.VISIBLE
12
Ilker Baltaci

Wenn Sie auf die Antwort eines Servers warten, sollte dies programmgesteuert erfolgen . Sie können einen Fortschrittsdialog erstellen und diesen schließen, aber das ist nicht "the Android way").

Derzeit wird empfohlen, ein DialogFragment zu verwenden:

public class MySpinnerDialog extends DialogFragment {

    public MySpinnerDialog() {
        // use empty constructors. If something is needed use onCreate's
    }

    @Override
    public Dialog onCreateDialog(final Bundle savedInstanceState) {

        _dialog = new ProgressDialog(getActivity());
        this.setStyle(STYLE_NO_TITLE, getTheme()); // You can use styles or inflate a view
        _dialog.setMessage("Spinning.."); // set your messages if not inflated from XML

        _dialog.setCancelable(false);  

        return _dialog;
    }
}

Dann setzen Sie in Ihrer Aktivität Ihren Fragment-Manager und zeigen den Dialog an, sobald das Warten auf den Server gestartet wurde:

FragmentManager fm = getSupportFragmentManager();
MySpinnerDialog myInstance = new MySpinnerDialog();
}
myInstance.show(fm, "some_tag");

Sobald Ihr Server vollständig geantwortet hat, werden Sie ihn schließen:

myInstance.dismiss()

Denken Sie daran, dass der Fortschrittsdialog je nach Attributen ein Drehfeld oder ein Fortschrittsbalken ist. Weitere Informationen finden Sie im API-Handbuch

9
quinestor

So habe ich das gemacht, damit immer nur ein Fortschrittsdialog geöffnet ist. Gestützt auf die Antwort von Suraj Bajaj

private ProgressDialog progress;



public void showLoadingDialog() {

    if (progress == null) {
        progress = new ProgressDialog(this);
        progress.setTitle(getString(R.string.loading_title));
        progress.setMessage(getString(R.string.loading_message));
    }
    progress.show();
}

public void dismissLoadingDialog() {

    if (progress != null && progress.isShowing()) {
        progress.dismiss();
    }
}

Ich musste auch verwenden

protected void onResume() {
    dismissLoadingDialog();
    super.onResume();
}
5
Isaac Zais