Vermeiden Sie mehrfache Klicks auf eine Schaltfläche

  • Ich habe eine Anwendung, in der ich zwei Schaltflächen mit den Namen "next" und "previous" habe. Diese Schaltflächen dienen zum Navigieren durch die Geschichten, die von einer URL geladen werden. Wenn Sie auf die Schaltfläche tippen, erscheint der Dialog mit der Meldung "Bitte warten Sie, bis Daten geladen werden". Wenn Sie die nächste oder vorherige Schaltfläche ziemlich extravagant antippen, wird ein nicht enden wollendes Dialogfeld auf dem Bildschirm angezeigt.

    Gehen Sie folgendermaßen vor:

     public void onClick(View v) {
    
        try {
            pDialog = new ProgressDialog(StoriesListController.this);
            pDialog.setIndeterminate(true);
            pDialog.setIcon(R.drawable.icon_small);
            pDialog.setCancelable(true);
            if (isFavoriteList == true) {
                pDialog.setMessage("Loading favorites...");
            } else {
                pDialog.setMessage("Loading data...");
            }
            pDialog.setTitle("Please wait");
            pDialog.setOnCancelListener(new OnCancelListener() {
    
                public void onCancel(DialogInterface arg0) {
                    if (cancelableHeavyWorker != null) {
                        cancelableHeavyWorker.setHandler(null);
                    }
                    finish();
                }
            });
            pDialog.show();
    
            if (v == next) {
                if (ind < items.size() - 1) {   
                    ind++;
                    loadAndShowNextActivity();
                }
            } else if (v == previous) {
                if (ind > 0) {
                    ind--;
                    loadAndShowNextActivity();
                }
            }
    
        } catch (Exception e) {
    
            Log.e("Error", "--.OnClink Message" + e.toString());
            e.printStackTrace();
        }
    }
     

    Wo gehe ich schief? Wie vermeide ich mehrfache Klicks oder den endlosen Dialog. Jede Hilfe wird geschätzt.

    24 August 2011
    Usama Sarwar
5 answers
  • Deaktivieren Sie die Schaltfläche "Weiter", bis die Daten vollständig geladen sind oder der Vorgang abgebrochen wird.

    24 August 2011
    Tobias
  • Nach dem Klicken auf die Schaltfläche führen Sie setEnabled(false) zu dieser Schaltfläche aus, um mehrere Klicks zu deaktivieren

    24 August 2011
    peter.bartos
  • Alternativ zu den anderen Antworten können Sie eine boolesche Variable auf true setzen, wenn Sie auf die Schaltfläche klicken, und auf false setzen, wenn Sie den Klick abgeschlossen haben.

    Auf diese Weise können Sie mehrere Klicks ignorieren und müssen die Schaltfläche nicht deaktivieren, um möglicherweise lästiges Flackern der Schaltfläche zu vermeiden.

    24 August 2011
    Jeroen
  •  dialogButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
                    dialogButton.setEnabled(false);
                    ....
    
    
    
     dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
                    @Override
                    public void onDismiss(DialogInterface dialogInterface) {
                        dialogButton.setEnabled(true);
                    }
                });
     
    21 February 2012
    Georgy Gobozov
  • Nach dem Anklicken der Schaltfläche setEnabled (false) und in loadAndShowNextActivity () wird pDialog.dismiss ()

    geschlossen
    24 August 2011
    Aracem