2017-06-02 4 views
0

Ich versuche, Schaltflächen zu erstellen, die bestimmte Anweisungen basierend auf einem einfachen Klick und einem langen Klick ausführen, aber ich bin mit wenig Verständnis darüber, wie alles zusammengefügt werden. Das Ausführen einer definierten Methode für jede Schaltfläche ist in Ordnung, aber ich denke, es wäre besser, onClickListeners dafür zu verwenden, oder?Verschiedene onClick- und onLongClick-Methoden für zwei Schaltflächen

Also ist mein Code wie folgt. Wie du sehen kannst, versuche ich, beide Arten von Ereignissen für jede Taste zu erfassen, aber wenn ich die Taste 1A drücke, bekomme ich den Toast der 2A, und wenn ich auf die Taste 2A klicke, erhalte ich einen Fehler und die App stürzt ab. Die zweite Sache zu beheben ist, die onClick und onLongClick zu verbinden.

activity_scout.xml

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView 
android:layout_height="match_parent" 
android:layout_width="match_parent" 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
tools:context="com.example.android.scout.ScoutActivity"> 

<LinearLayout 
    android:id="@+id/activity_scout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="8dp" 
    android:paddingLeft="8dp" 
    android:paddingRight="8dp" 
    android:paddingTop="8dp" 
    android:orientation="vertical" > 

    <Button 
     android:id="@+id/but1A" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="1a" 
     android:onClick="click1a" 
     /> 

    <Button 
     android:id="@+id/but2A" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="2a" 
     android:onClick="click2a" /> 


    </LinearLayout> 
</ScrollView> 

ScoutActivity.java

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.Toast; 

import static com.example.android.basketscout.R.id.butPlayer1A; 
import static com.example.android.basketscout.R.id.butPlayer2A; 
import static com.example.android.basketscout.R.id.butPlayer3A; 
import static com.example.android.basketscout.R.id.butPlayer4A; 
import static com.example.android.basketscout.R.id.butPlayer5A; 
import static com.example.android.basketscout.R.id.textView; 

public class ScoutActivity extends AppCompatActivity { 

    Button but1A; 
    Button but2A; 
    Button but3A; 
    Button but4A; 
    Button but5A; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_scout); 

     but1A = (Button) findViewById(R.id.but1A); 
     but2A = (Button) findViewById(R.id.but1A); 

     but1A.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View view){ 
       Toast.makeText(getApplicationContext(), "Button 1A clicked", Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     but2A.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View view){ 
       Toast.makeText(getApplicationContext(), "Button 2A clicked", Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     but1A.setOnLongClickListener(new View.OnLongClickListener(){ 
      public void onLongClick (View view) { 
       Toast.makeText(getApplicationContext(),"Button 1A long clicked", Toast.LENGTH_SHORT).show(); 
      } 
     }); 

    but2A.setOnLongClickListener(new View.OnLongClickListener(){ 
     public void onLongClick (View view) { 
      Toast.makeText(getApplicationContext(),"Button 2A long clicked", Toast.LENGTH_SHORT).show(); 
     } 
    }); 
    } 

} 

[Wenn Sie einen Fehler wie unclosed parentheris sehen oder nicht vollständig entsprechen sollten Variablennamen, es ist wegen einiger bearbeiten von der Kopie/einfügen Ich habe]

+0

Entfernen 'android: onClick = "click1a"' und 'android: onClick = "click2a"'. Dies ist redundant. – AlphaQ

+0

Errror log ?? ... –

+0

@alphaQ, Warum ist das redundant? Sind das nicht zwei verschiedene Knöpfe? – GondraKkal

Antwort

1

Sie finden die gleiche Ansicht zweimal, müssen Sie diesen Teil Ihres Codes ändern:

but1A = (Button) findViewById(R.id.but1A); 
but2A = (Button) findViewById(R.id.but1A); 

Um dies:

but1A = (Button) findViewById(R.id.but1A); 
but2A = (Button) findViewById(R.id.but2A); 

Entfernen Sie auch die Attribut von Layout, es ist überflüssig und führt zu Konflikten. Entfernen

<Button 
     android:id="@+id/but1A" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="1a"/> 

    <Button 
     android:id="@+id/but2A" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="2a"/> 
+0

Ok, ein Problem gelöst, aber was ist mit der Sekunde? Wie füge ich die onLongClick-Methode hinzu? – GondraKkal

+0

Sie tun es programmatisch mit OnLongItemClickListener –

0

Ihre onClick Eingabe in der XML-Datei, wenn Sie eine onClick Methode von xml erklären Sie müssen nicht setOnClickListener auf den Tasten rufen Objekt erstellen, anstatt nur diese Methode mit den Parametern der yourOnClickMethod(View view)

0

Ihr Code enthält Fehler. Zunächst wird darauf bereits von @Luiz heraus, welche die Bindung von Blick auf das Button-Objekt ist:

but2A = (Button) findViewById(R.id.but2A); 

Auch hier ist ein Thread, die Ihnen helfen, weil ich sehe, Sie onClick Attribut in Ihrem xml für die Button Tags deklariert haben : How exactly does the android:onClick XML attribute differ from setOnClickListener?

Grundsätzlich gibt es diese zwei Möglichkeiten Klick Zuhörer Implementierung und wenn Ihr setOnClickListener() dann verwenden onClick Attribut in XML ist nicht erforderlich, und umgekehrt.

0

Problem ist, dass Sie die gleiche ID finden zweimal:

but1A = (Button) findViewById(R.id.but1A); 
    but2A = (Button) findViewById(R.id.but1A); 

Um

but1A = (Button) findViewById(R.id.but1A); 
    but2A = (Button) findViewById(R.id.but2A); 

Dann

Für Zuhörer lange klicken für Ansichten sehen diese how to implement a long click listener on a listview

0

Entfernen Sie die onClick Attribut von Schaltflächenlayout

und korrigieren Sie diesen Code

but1A = (Button)findViewById(R.id.but1A); 
but2A = (Button)findViewById(R.id.but1A); 

Um

but1A = (Button)findViewById(R.id.but1A); 
but2A = (Button)findViewById(R.id.but2A); 
Verwandte Themen