web-dev-qa-db-fra.com

Impossible de trouver une méthode onClick (View) dans l'activité

Le clic du bouton dans la disposition de gonflage échoue à l'exécution car la méthode est introuvable . E/AndroidRuntime (921): Java.lang.IllegalStateException: Impossible de trouver une méthode onClick (Afficher) dans l'activité Mais, si cliquez sur le bouton de la disposition principale, travaillez bien . Qu'est-ce que j'ai mal fait?

UPDATE: change code ... stil fail ... ajoute un journal des erreurs Je souhaite que tous mes boutons soient traités de la même manière.

classe d'activité principale

package com.Android.insertview;


import Android.app.Activity;
import Android.content.Context;
import Android.os.Bundle;
import Android.view.Gravity;
import Android.view.LayoutInflater;
import Android.view.View;
import Android.view.View.OnClickListener;
import Android.view.ViewGroup;
import Android.widget.Toast;

public class InsertViewActivity extends Activity {
    /** Called when the activity is first created. */

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        /*LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        ViewGroup parent = (ViewGroup)findViewById(R.id.main_view);
        inflater.inflate(R.layout.volume_control, parent);*/

        LayoutInflater vi = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);        
        View v = vi.inflate(R.layout.volume_control, null);    
        View insertPoint = findViewById(R.id.main_view);
        ((ViewGroup) insertPoint).addView(v, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT
                                                                            , ViewGroup.LayoutParams.WRAP_CONTENT));
    }


    public void btnclick(View v) {
        // TODO Auto-generated method stub
        Context context = getApplicationContext();
        Toast toast = Toast.makeText(context, 
            "This is Toast Notification", Toast.LENGTH_SHORT);
        toast.setGravity(Gravity.CENTER, 0, 0);
        toast.show();       
    }
}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:orientation="vertical" Android:id="@+id/main_view">
</LinearLayout>

disposition gonflante

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:orientation="vertical" Android:background="@drawable/service_button_container_background" 
    Android:id="@+id/volume_view"> 

    <Button
        Android:id="@+id/volume_up"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:background="@drawable/button_volume_up" 
        Android:onClick="btnclick" />

    <Button
        Android:id="@+id/button2"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:background="@drawable/button_volume_mute_off" 
        Android:onClick="btnclick"/>

    <Button
        Android:id="@+id/volume_down"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:background="@drawable/button_volume_down" 
        Android:onClick="btnclick"/>

</LinearLayout>

journal des erreurs

03-19 15:31:45.184: W/dalvikvm(1071): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
03-19 15:31:45.184: E/AndroidRuntime(1071): Uncaught handler: thread main exiting due to uncaught exception
03-19 15:31:45.194: E/AndroidRuntime(1071): Java.lang.IllegalStateException: Could not find a method genclick(View) in the activity
03-19 15:31:45.194: E/AndroidRuntime(1071):     at Android.view.View$1.onClick(View.Java:2020)
03-19 15:31:45.194: E/AndroidRuntime(1071):     at Android.view.View.performClick(View.Java:2364)
03-19 15:31:45.194: E/AndroidRuntime(1071):     at Android.view.View.onTouchEvent(View.Java:4179)
03-19 15:31:45.194: E/AndroidRuntime(1071):     at Android.widget.TextView.onTouchEvent(TextView.Java:6541)
03-19 15:31:45.194: E/AndroidRuntime(1071):     at Android.view.View.dispatchTouchEvent(View.Java:3709)
03-19 15:31:45.194: E/AndroidRuntime(1071):     at Android.view.ViewGroup.dispatchTouchEvent(ViewGroup.Java:884)
03-19 15:31:45.194: E/AndroidRuntime(1071):     at Android.view.ViewGroup.dispatchTouchEvent(ViewGroup.Java:884)
03-19 15:31:45.194: E/AndroidRuntime(1071):     at Android.view.ViewGroup.dispatchTouchEvent(ViewGroup.Java:884)
03-19 15:31:45.194: E/AndroidRuntime(1071):     at Android.view.ViewGroup.dispatchTouchEvent(ViewGroup.Java:884)
03-19 15:31:45.194: E/AndroidRuntime(1071):     at Android.view.ViewGroup.dispatchTouchEvent(ViewGroup.Java:884)
03-19 15:31:45.194: E/AndroidRuntime(1071):     at com.Android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.Java:1659)
03-19 15:31:45.194: E/AndroidRuntime(1071):     at com.Android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.Java:1107)
03-19 15:31:45.194: E/AndroidRuntime(1071):     at Android.app.Activity.dispatchTouchEvent(Activity.Java:2061)
03-19 15:31:45.194: E/AndroidRuntime(1071):     at com.Android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.Java:1643)
03-19 15:31:45.194: E/AndroidRuntime(1071):     at Android.view.ViewRoot.handleMessage(ViewRoot.Java:1691)
03-19 15:31:45.194: E/AndroidRuntime(1071):     at Android.os.Handler.dispatchMessage(Handler.Java:99)
03-19 15:31:45.194: E/AndroidRuntime(1071):     at Android.os.Looper.loop(Looper.Java:123)
03-19 15:31:45.194: E/AndroidRuntime(1071):     at Android.app.ActivityThread.main(ActivityThread.Java:4363)
03-19 15:31:45.194: E/AndroidRuntime(1071):     at Java.lang.reflect.Method.invokeNative(Native Method)
03-19 15:31:45.194: E/AndroidRuntime(1071):     at Java.lang.reflect.Method.invoke(Method.Java:521)
03-19 15:31:45.194: E/AndroidRuntime(1071):     at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:860)
03-19 15:31:45.194: E/AndroidRuntime(1071):     at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:618)
03-19 15:31:45.194: E/AndroidRuntime(1071):     at dalvik.system.NativeStart.main(Native Method)
03-19 15:31:45.194: E/AndroidRuntime(1071): Caused by: Java.lang.NoSuchMethodException: genclick
03-19 15:31:45.194: E/AndroidRuntime(1071):     at Java.lang.ClassCache.findMethodByName(ClassCache.Java:308)
03-19 15:31:45.194: E/AndroidRuntime(1071):     at Java.lang.Class.getMethod(Class.Java:1014)
03-19 15:31:45.194: E/AndroidRuntime(1071):     at Android.view.View$1.onClick(View.Java:2017)
03-19 15:31:45.194: E/AndroidRuntime(1071):     ... 22 more

MISE À JOUR 2:

ok, si je le fais, je peux gérer tous les boutons cliquer dans une méthode genericClick ()

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/front_end"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent" >

    <!-- Main -->
    <LinearLayout
        xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:id="@+id/main_view"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignParentBottom="true"
        Android:layout_centerHorizontal="true"
        Android:background="@drawable/service_button_container_background" >

        <ImageButton
            Android:id="@+id/radio"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:background="@drawable/button_radio"
            Android:clickable="true"
            Android:onClick="genericClick" />

        <ImageButton
            Android:id="@+id/player"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:background="@drawable/button_player"
            Android:onClick="genericClick" />

        <ImageButton
            Android:id="@+id/navi"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:background="@drawable/button_navigation"
            Android:onClick="genericClick" />
    </LinearLayout>

    <!-- Volume controls -->
    <LinearLayout
        xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:id="@+id/volume_controls"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignParentLeft="true"
        Android:layout_centerVertical="true"
        Android:background="@drawable/service_button_container_background"
        Android:orientation="vertical" >

        <ImageButton
            Android:id="@+id/volume_up"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:background="@drawable/button_volume_up"
            Android:onClick="genericClick" />

        <ImageButton
            Android:id="@+id/volume_mute"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:background="@drawable/button_volume_mute_off"
            Android:onClick="genericClick" />

        <ImageButton
            Android:id="@+id/volume_down"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:background="@drawable/button_volume_down"
            Android:onClick="genericClick" />
    </LinearLayout>

    <!-- Radio controls -->
    <LinearLayout
        xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:id="@+id/radio_controls"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignParentTop="true"
        Android:layout_alignRight="@+id/main_view"
        Android:layout_marginRight="100dp"
        Android:background="@drawable/service_button_container_background"
        Android:visibility="invisible" >

        <ImageButton
            Android:id="@+id/radio_preset"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:onClick="genericClick" Android:background="@drawable/button_menu"/>

        <ImageButton
            Android:id="@+id/button2"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:background="@drawable/button_rewind"
            Android:onClick="genericClick" />

        <ImageButton
            Android:id="@+id/button3"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:background="@drawable/button_play"
            Android:onClick="genericClick" />

        <ImageButton
            Android:id="@+id/button4"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:background="@drawable/button_forward"
            Android:onClick="genericClick" />
    </LinearLayout>

    <!-- Radio Info -->
    <LinearLayout
        xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:id="@+id/radio_info"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignBottom="@+id/radio_controls"
        Android:layout_alignLeft="@+id/main_view"
        Android:layout_marginLeft="100dp"
        Android:background="@drawable/service_button_container_background"
        Android:orientation="vertical" 
        Android:visibility="invisible">

        <LinearLayout
            xmlns:Android="http://schemas.Android.com/apk/res/Android"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content" >

            <TextView
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:text="FM"
                Android:textSize="18.0px" />

            <TextView
                Android:id="@+id/preset"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:text="1"
                Android:textColor="#ffd6d6d6"
                Android:textSize="18.0px" />

            <TextView
                Android:layout_width="10.0dip"
                Android:layout_height="wrap_content"
                Android:text=" "
                Android:textSize="18.0px" />

            <TextView
                Android:id="@+id/frequency"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:text="108.0"
                Android:textColor="#ffd6d6d6"
                Android:textSize="18.0px" />
        </LinearLayout>

        <LinearLayout
            xmlns:Android="http://schemas.Android.com/apk/res/Android"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content" >

            <TextView
                Android:id="@+id/title"
                Android:layout_width="195.0dip"
                Android:layout_height="24.0dip"
                Android:text="Русское радио"
                Android:textColor="#ffd6d6d6"
                Android:textSize="18.0px" />
        </LinearLayout>
    </LinearLayout>
</RelativeLayout>
20
SpuDy

Supprimez l'annotation @Override. Découvrez la documentation officielle _ pour Android: onClick - dans leur cas, la méthode du gestionnaire "selfDestruct (View)".

Update: comme le suggèrent les autres, vous ne devriez pas utiliser un tel nom générique pour votre méthode de gestionnaire d'événements - "onClick" est trop générique. Et si vous avez 10 boutons? Essayez quelque chose comme "onClickLoginButton", "onClickSaveBtn" etc . Je pense que vous ne pouvez pas utiliser "onClick" comme nom pour votre méthode de gestionnaire pair, car la méthode View.OnClickListener a "onClick" , vous devez donc changer le nom de toute façon.

<Button
    Android:id="@+id/volume_up"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:background="@drawable/button_volume_up" 
    Android:onClick="handleVolumeUp" />

Et dans votre classe d'activité

public void handleVolumeUp(View view) {
    // TODO Auto-generated method stub    
}

Supprimez l'implémentation de OnClickListener afin que la définition de votre classe devienne:

public class InsertViewActivity extends Activity

UPDATE2: Si vous souhaitez que tous les boutons soient traités par écouteur en 1 clic, procédez comme suit:

@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button btn1 = (Button)findViewById(R.id.btn1);
    btn1.setOnClickListener(btnListener);
    Button btn2 = (Button)findViewById(R.id.btn2);
    btn2.setOnClickListener(btnListener);
    Button btn3 = (Button)findViewById(R.id.btn3);
    btn3.setOnClickListener(btnListener);
}

private OnClickListener btnListener = new OnClickListener()
{

    public void onClick(View v)
    {   
      //do the same stuff or use switch/case and get each button ID and do different   

      //stuff depending on the ID
    } 

};  
12
hovanessyan

Le problème dans les thèmes de mises en page pour Android 5.X L'activité principale n'a pas de thème de balise dans layout.xml Other. Et c'est une erreur pour Android OS.

La solution est la suivante: Android 5 et onClick en format XML

En bref: 1) supprimer les étiquettes des étiquettes de toutes les mises en page; 2) ajouter des étiquettes avec les expressions correctes dans le manifeste

J'ai essayé pour les téléphones Android 5.X - cela fonctionne.

2
Denis

Si vous ne substituez pas de méthode, supprimez donc @Override

Pour éviter cela à l'avenir, vous pouvez créer votre propre annotation pour déclarer vos méthodes ajoutées dans la présentation XML Android.

Voici un tutoriel de publication de blog:

http://blog.blundell-apps.com/using-annotations-for-Android-xml-onclick-visibility/

2
Blundell

Un problème courant que j’ai vu est que les débutants vont déclarer la méthode onClick protégée ou privée. Dans ce cas, le moteur XML ne peut pas accéder à la méthode qui crée ce problème.

1
Andrew S

Votre deuxième activité est-elle dans le fichier manifest.xml?

Vous devez ajouter toutes vos activités. Voir le code ci-dessous Change SecondActivity dans votre activité. Et définissez le nom du package sur lequel votre activité est située

<application
    Android:allowBackup="true"
    Android:icon="@drawable/ic_launcher"
    Android:label="@string/app_name"
    Android:theme="@style/AppTheme" >
    <activity
        Android:name="PackageName.MainActivity" Android:label="@string/app_name" >
        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />

            <category Android:name="Android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity 
        Android:name="PackageName.SecondActivityName" >     
    </activity>

</application>

0
matthijsW