2017-06-02 3 views
0

J'essaye de créer des boutons qui vont exécuter certaines instructions différentes en fonction d'un simple clic et d'un clic long, mais je suis frappé d'un manque de compréhension sur la façon de tout mettre ensemble. Effectuer une méthode définie pour chaque bouton est ok, mais je pense qu'il serait préférable d'utiliser onClickListeners pour cela, n'est-ce pas?Différentes méthodes onClick et onLongClick pour deux boutons

Donc, mon code est le suivant. Comme vous pouvez le voir, j'essaie d'attraper les deux types d'événements pour chaque bouton, mais quand j'appuie sur le bouton 1A, j'obtiens le toast du 2A, et quand je clique sur le bouton 2A, j'obtiens une erreur et l'application plante. La deuxième chose à corriger est de lier ensemble onClick et onLongClick.

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(); 
     } 
    }); 
    } 

} 

[Si vous voyez une erreur comme parentheris ou non fermé pas les noms complètement variables correctes, il est à cause de certains de modifier la copie/coller je l'ai fait]

+0

Supprimer 'android: onclick = "click1a"' et 'android: onclick = "click2a"'. C'est redondant. – AlphaQ

+0

Journal d'erreur ?? ... –

+0

@alphaQ, Pourquoi est-ce redondant? Ne sont-ils pas deux boutons différents? – GondraKkal

Répondre

1

Vous retrouvez la même vue à deux reprises, vous devez changer cette partie de votre code:

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

à ceci:

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

Aussi, supprimez l'attribut de mise en page, il est redondant et provoque des conflits.

<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, un problème résolu, mais qu'en est-il de la seconde? Comment ajouter la méthode onLongClick? – GondraKkal

+0

vous le faites par programmation en utilisant OnLongItemClickListener –

0

Retirez votre entrée onclick dans le fichier xml, Si vous déclarez une méthode onClick de xml vous ne créez simplement pas besoin d'appeler setOnClickListener sur les boutons objet à la place cette méthode avec les paramètres de yourOnClickMethod(View view)

0

Il y a des erreurs dans votre code. La première est déjà signalé par @Luiz qui est la liaison de vue de l'objet bouton:

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

De plus, voici un fil qui pourrait vous aider parce que je vois que vous avez déclaré onClick attribut dans votre xml pour les Button balises : How exactly does the android:onClick XML attribute differ from setOnClickListener?

Fondamentalement, il y a ces deux façons de mettre en œuvre les auditeurs de clic et que vous utilisez si setOnClickListener() alors onClick attribut XML n'est pas nécessaire et vice versa.

0
problème

est de vous trouver le même identifiant deux fois:

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

Pour

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

Ensuite,

Pour longue écoute de clic pour les vues voir ce how to implement a long click listener on a listview

0

Retirez le onClick attribut de Disposition des boutons

Et corriger ce code

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

Pour

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