Ich implementiere gerade meinen eigenen benutzerdefinierten Fortschrittsdialog, in dem ich show and hide anrufe, sobald ein Ergebnis eintrifft/ein Fehler auftritt. Ich möchte jedoch eine benutzerdefinierte Methode implementieren, die sagt, wenn der Fortschrittsdialog nicht nach 10 Sekunden, egal was versteckt wurde, ausblenden und eine Warnung ausgeben.Wie versteckt man ein benutzerdefiniertes Ladesymbol nach einer bestimmten Zeit (Android)?
Dies ist meine benutzerdefinierte Fortschrittsdialog mit meiner Methode, die funktioniert, aber nicht vollständig.
public class CustomProgressDialog extends ProgressDialog {
private AnimationDrawable animation;
private CountDownTimer cTimer = null;
private Context mContext;
public CustomProgressDialog(Context context) {
super(context);
mContext = context;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.custom_progress_dialog);
ImageView la = (ImageView) findViewById(R.id.animation);
la.setBackgroundResource(R.drawable.custom_progress_dialog_animation);
animation = (AnimationDrawable) la.getBackground();
}
@Override
public void show() {
super.show();
animation.start();
startTimer();
}
@Override
public void dismiss() {
super.dismiss();
animation.stop();
if(cTimer != null) {
cTimer.cancel();
}
}
//timer added just in case progress dialog does not stop on its own
private void startTimer() {
cTimer = new CountDownTimer(10000, 1000) {
public void onTick(long millisUntilFinished) {
}
public void onFinish() {
dismiss();
AlertDialogManager alert = new AlertDialogManager();
alert.showAlertDialog(mContext, mContext.getString(R.string.loadingErr), mContext.getString(R.string.loadingErrTxt), 3);
}
}.start();
}
@Override
public void onDetachedFromWindow() {
super.onDetachedFromWindow();
animation.stop();
cTimer.cancel();
}
}
Dies ist, wie ich es in der Tätigkeit/Fragmente implementieren:
private void showProgressDialog() {
customProgressDialog = new CustomProgressDialog(this);
customProgressDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
customProgressDialog.show();
//so it cannot be closed by user first one lets back button cancel it
//customProgressDialog.setCanceledOnTouchOutside(false);
customProgressDialog.setCancelable(false);
}
private void hideProgressDialog() {
if(customProgressDialog != null) {
//customProgressDialog.hide();
}
}
UPDATE: Dies ist eine zweite Option, die ich versuchte, noch die Warnung nicht aus Aufspringen nicht aufhören, die mich macht denke, der timer läuft noch immer auf abbrechen.
Dies ist die Aktivität:
private void autoProgressShutdown() {
Runnable progressRunnable = new Runnable() {
@Override
public void run() {
customProgressDialog.cancel();
callAlert();
}
};
Handler pdCanceller = new Handler();
pdCanceller.postDelayed(progressRunnable, 10000);
}
private void callAlert() {
AlertDialogManager alert = new AlertDialogManager();
alert.showAlertDialog(this, getString(R.string.loadingErr), getString(R.string.loadingErrTxt), 3);
}
private void showProgressDialog() {
customProgressDialog = new CustomProgressDialog(this);
customProgressDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
customProgressDialog.show();
//so it cannot be closed by user first one lets back button cancel it
//customProgressDialog.setCanceledOnTouchOutside(false);
customProgressDialog.setCancelable(false);
autoProgressShutdown();
}
private void hideProgressDialog() {
customProgressDialog.cancel();
if(customProgressDialog != null) {
customProgressDialog.hide();
}
}
Im benutzerdefinierten Dialog bearbeitet die Datei alle Timer Sachen zu entfernen und hat dieses Bild:
@Override
public void setOnCancelListener(OnCancelListener listener) {
super.setOnCancelListener(listener);
dismiss();
}
Mögliche Probleme: -nicht sicher, ob Speicherleck Probleme, da ich es nicht zerstöre
Bestimmte Probleme: -wenn der Fortschrittsdialog ausgeblendet wird, erscheint immer noch der Alarm a N ach 10 Sekunden, das bedeutet entweder gar nicht cancel -Auch aufgerufen, wenn ich Bildschirme schalten nicht sicher, die abbrechen, wenn genug ist, um den Timer