2016-05-04 6 views
0

Ich frage mich, was ist der beste Weg, um eine Taste verwenden, um mehrere Funktionen zu unterstützen.Was ist die beste Praxis für die Verwendung einzelner Taste mit mehreren Funktionen

Sagen wir, ich habe Anwendung, um Musik zu spielen. Es gibt einen "Play/Pause" -Button. Sollte ich:

1) eine Taste verwenden, und überschreiben seine onClickListener auf verschiedene Aktionen (Wiedergabe ausführen oder Pausenmusik)

2) Verwenden Sie eine Taste und ein onClickListener, wo ich überprüfen, welche aktuellen Stand ist, und führen Sie Aktion abhängig in diesem Zustand verwendet

3) zwei Tasten mit einer onClickListener s für jede Taste und Ein-/ausblenden Tasten nur eine Taste sichtbar

4) Etwas anderes hat?

Gibt es irgendein Muster oder hängt es von der Situation ab?

+0

Wenn Sie wirklich 2 Funktionen für 1-Taste haben, muss ich die zweite Option würde –

Antwort

1

Android verfügt bereits über ToggleButton, die automatisch einen Status "überprüft" verfolgt. Wenn Sie mehr als 2 Zustände wünschen, sollten Sie ein passenderes UI-Element wie Spinner in Betracht ziehen.

0

Ich würde eine einzelne Schaltfläche verwenden und OnClickListener überschrieben. Von dort verwenden Sie einen Schalter oder eine if-Klausel, um die Funktionalität zu bestimmen, die es bedient.

0

Ich denke, Ihr zweiter Weg ist der beste Weg. Minimale Code-Redundanz und eine Zustandsmaschine. Es ist der sauberste Weg.

In Android können Sie auch die dritte Möglichkeit verwenden. Klicken Sie auf den Button, machen Sie ihn unsichtbar, machen Sie etwas und machen Sie den anderen Button sichtbar. Beide Buttons haben ihren eigenen onClickListener. Es ist nicht kompliziert, aber auch nicht wirklich hübsch.

0

Nehmen wir an, das Beispiel ist auf eine Musik-App eingestellt, wie Sie bereits erwähnt haben. In jeder Musik-App gibt es eine Taste zum Spielen und Pausieren, zwei Tasten auf der linken und rechten Seite, um zum nächsten Titel zu springen oder zum vorherigen Titel zu springen, und eine Lautstärketaste.

Sie können den Benutzer die Play/Pause-Taste lange halten lassen, wodurch die Musik komplett stoppt (daher sollte das Stopp-Symbol für den Benutzer kurzzeitig angezeigt werden, um die Long-Hold-Funktion der Taste anzuzeigen benutzen). Halten Sie die Tasten nach links gedrückt und spulen Sie den Musiktitel zurück. Halte das Lautstärkesymbol gedrückt und stumm. Du hast die Idee.

Aber wie implementieren wir es? Erstens, onclick innerhalb des Aktivitätslayouts xml zu deklarieren reicht nicht aus, da es nur Klicks erkennt. Sie sollten allen Schaltflächen eine ID (@+id/play_button) geben und dann im Code darauf verweisen (Button play_button = (Button) findViewById(R.id.play_button);). Dann legen Sie einen onClickListener fest und verwenden dann das MotionEvent, um lange Drücken und Halten zu erkennen. A good idea to get is from here. (Sie sollten Google verwendet haben! lol)

Dies wäre ein guter Anfang. Wenn Sie Beispiele benötigen, probieren Sie PowerAMP, das ähnliche Hold-Funktionalität besitzt.

0

in Ihrem xml:

<Button 
android:tag="Play" 
../> 

in Ihrer Aktivität:

button.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
    if(((String)v.getTag()).equals("Play")){ 
     v.setTag("Pause"); 
     //DO YOUR WORK 

    }else{ 
     v.setTag("Play"); 
     //DO YOUR WORK 
    }  
    } 
}); 
+0

Es sieht nicht so aus Eine gute Lösung hängt von String als aktuellen Zustand ab. Ist es nicht besser, eine Variable zu verwenden, um den aktuellen Status zu speichern? – user3921796

+0

Natürlich können Sie. getTag() gibt ein Objekt zurück, das Sie mit dem setTag (Objekt-Tag) definiert haben. Genauso können Sie auch setText, getText Methoden verwenden. Auf diese Weise können Sie den Text der Schaltfläche behandeln, um den Benutzer über den aktuellen Status der Schaltfläche zu informieren. – uguboz

Verwandte Themen