Qual é a melhor maneira de mostrar um controle giratório de carregamento enquanto o aplicativo aguarda uma resposta do servidor?
Isso pode ser feito programaticamente? Para que eu não precise adicionar o controle giratório de carga no arquivo xml?
Qual é a melhor maneira de mostrar um controle giratório de carregamento enquanto o aplicativo aguarda uma resposta do servidor?
Isso pode ser feito programaticamente? Para que eu não precise adicionar o controle giratório de carga no arquivo xml?
Respostas:
O ProgressDialog foi descontinuado do Android Oreo. Use ProgressBar vez
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();
OU
ProgressDialog.show(this, "Loading", "Wait while loading...");
A propósito, o Spinner tem um significado diferente no Android. (É como o menu suspenso de seleção em HTML)
progress.setCancelable(false);
.
ProgressDialog
foi preterido no Android O developer.android.com/reference/android/app/ProgressDialog.html
ProgressDialog ficou obsoleto desde o nível 26 da API, https://developer.android.com/reference/android/app/ProgressDialog.html
Incluo uma ProgressBar no meu layout
<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" />
e altere sua visibilidade para .GONE | .VISIBLE dependendo do caso de uso.
progressBar_cyclic.visibility = View.VISIBLE
Usar ProgressDialog
ProgressDialog.show(Context context, CharSequence title, CharSequence message);
No entanto, isso é considerado hoje um anti-padrão (2013): http://www.youtube.com/watch?v=pEGWcMTxs3I
ProgressDialog
foi preterido no Android O developer.android.com/reference/android/app/ProgressDialog.html
Na verdade, se você estiver esperando pela resposta de um servidor, isso deve ser feito programaticamente. Você pode criar uma caixa de diálogo de progresso e descartá-la, mas, novamente, esse não é o "modo android".
Atualmente, o método recomendado é usar um DialogFragment :
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;
}
}
Em sua atividade, você define seu gerenciador de fragmentos e mostra a caixa de diálogo assim que a espera pelo servidor é iniciada:
FragmentManager fm = getSupportFragmentManager();
MySpinnerDialog myInstance = new MySpinnerDialog();
}
myInstance.show(fm, "some_tag");
Depois que o servidor responder, você o descartará:
myInstance.dismiss()
Lembre-se de que o progressdialog é um spinner ou uma barra de progresso, dependendo dos atributos, leia mais no guia da API
ProgressDialog
foi preterido no Android O developer.android.com/reference/android/app/ProgressDialog.html
Foi assim que fiz isso para que apenas uma caixa de diálogo de progresso possa ser aberta por vez. Baseado na resposta de 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();
}
}
Eu também tive que usar
protected void onResume() {
dismissLoadingDialog();
super.onResume();
}
ProgressDialog
foi preterido no Android O developer.android.com/reference/android/app/ProgressDialog.html