Come risolvere un doppio tap sul Tasto Problema in android?

Mockup della mia Applicazione :

Come risolvere un doppio tap sul Tasto Problema in android?


Problema :

Quando si clicca su button1 appena chiamata Intento di ActivitySecond

button1.setOnClickListener(this);

public void onClick(View v) {
//TODO Auto-generated method stub
     switch (v.getId()) 
     {
          case R.id.button1:
                Intent intent = new Intent(getApplicationContext(), ActivitySecond.class);
                startActivity(intent);
                break;
          default:
                break;
     }
}

Ma, a Doppio rubinetto aperto due volte ActivitySecond.


COME RISOLVERLO.

PER FAVORE, SE QUALSIASI SOLUZIONE DA CONDIVIDERE.

Grazie.

InformationsquelleAutor Darshak | 2013-05-21



6 Replies
  1. 5

    È possibile impostare launchMode di ActivitySecond per singleTop

    <activity android:name=".ActivitySecond"
                android:launchMode="singleTop"
                >
                ...
    </activity>
    • Grazie. Posso risolvere con il vostro codice. 🙂
    • Non è la soluzione migliore IMO, in quanto porta la qualità dell’esperienza utente. La seconda attività si avvia ancora due volte (che viene notata dall’utente, a meno che l’animazione è disattivato e non è ottimale, in termini di consumo di risorse). Inoltre, l’attivazione di questo flag può pasticciare con la navigazione.
  2. 10

    Come Gabe Sechan triste:

    Questo può essere fatto tramite timer (il tempo di fare clic su di esso, si salva, e se si fa clic su di nuovo all’interno di dire 100ms ignorare il 2 ° click)

    Qui è un’implementazione che ho usato nel mio progetto:

    public abstract class OnOneClickListener implements View.OnClickListener {
        private static final long MIN_CLICK_INTERVAL = 1000; //in millis
        private long lastClickTime = 0;
    
        @Override
        public final void onClick(View v) {
            long currentTime = SystemClock.elapsedRealtime();
            if (currentTime - lastClickTime > MIN_CLICK_INTERVAL) {
                lastClickTime = currentTime;
                onOneClick(v);
            }
        }
    
        public abstract void onOneClick(View v);
    }

    Basta usare OnOneClickListener invece di OnClickListener ed eseguire il codice in onOneClick() metodo.

    La soluzione per disabilitare il pulsante in onClick() non funziona. Due clic di un pulsante è possibile pianificare l’esecuzione anche prima del primo onClick() eseguirà e disattivare il pulsante.

    • u può risolvere la mia query simile .. sto cercando di raccogliere un brindisi quando il pulsante di accensione viene premuto due volte
  3. 8

    Questo è chiamato debouncing – un classico problema di hardware e software. Ci sono un paio di trucchi che si possono fare, ma tutte si riducono a disabilitare il pulsante temporaneamente e abilitare di nuovo più tardi. Questo può essere fatto tramite timer (il tempo di fare clic su di esso, si salva, e se si fa clic su di nuovo all’interno di dire 100ms ignorare il 2 ° click). Un altro modo sarebbe quello di disabilitare il pulsante dopo onClick e riattivarlo quando la nuova Attività, finiture di via onActivityResult. O c’è una dozzina di altri modi, scegli il modo più semplice per voi.

  4. 2
    btn.setOnclickListener(new View.onClickListener(){
    
              public void onClick(View v) {
                    btn.setEnabled(false);
    
              }
        });

    devi fare il setEnabled(false) in onlclick evento.

    • Non voglio impostare abilita/disabilita, il suo processo lungo per me, perché ho 200+ layout nella mia applicazione. Il codice è anche vero.
    • sì, grazie per la tua risposta.
  5. 0

    Quando uso il selettore drawable nei Pulsanti
    e impostare

    android:clickable="true"
    android:focusable="true"
    android:focusableInTouchMode="true"

    si svolge l’evento onClick() su un doppio clic.
    L’ho trovato casualmente di essere al lavoro su emulatore android api di livello 10, Android 2.3.3
    Non testato su dispositivi reali. Ecco il codice Completo.

                   <Button
                    android:layout_width="50dp"
                    android:layout_height="wrap_content"
                    android:text="Discover"
                    android:id="@+id/Button1"
                    android:layout_weight=".5"
                    android:layout_margin="0dp"
                    android:background="@drawable/btn_nearby"
                    android:contentDescription="gjhfjhkjhgkvkjh"
                    android:drawableLeft="@drawable/ic_follow"
                    android:paddingLeft="20dp"
                    android:paddingRight="0dp"
                    android:drawablePadding="-10dp"
                    android:textSize="16sp"
                    android:paddingTop="2.5dp"
                    android:paddingBottom="2.5dp"
                    android:clickable="true"
                    android:focusable="true"
                    android:focusableInTouchMode="true"/> 

    E Codice Java

        @Override
        public void onClick(View view) {
            switch(view.getId()) {
    
                case R.id.Button1:
                    onButton1Click();
                    break;
    
                case R.id.Button2:
                    onButton2Click();
                    break;
    
              }
        }
  6. 0

    Mi limiterò a presentare una terza soluzione per questo. Ho risolto aggiungendo un valore booleano che è stato utilizzato per verificare se l’attività (che il pulsante di avvio) è stata avviata o non.

Lascia un commento