Tengo una aplicación que es de aproximadamente un año de edad, está en la Play store en su versión beta, ha pasado por decenas de revisiones. De repente estoy recibiendo un error:

No podía encontrar un método onClick_Foo(Ver) en la clase de actividad
android.vista.ContextThemeWrapper para onClick en vista de clase
android.widget.Botón con id ‘Foo_Button’

Que estoy recibiendo este error en cada uno de los 7 botones definidos en mi XML. Desde ayer he actualización appcompat-v7 de 21.0.3 a 22.0.0 pero también de actualizar mi dispositivo de pruebas de KitKat a Lollipop por primera vez.

He comprobado ortografía, capitalizaciones, ninguno de los sospechosos habituales explica esto. Aquí se muestra un ejemplo del código correspondiente. Déjeme saber si usted se siente más sería de gran ayuda. (La actividad se ha 915 líneas de código y el xml 186, así que no pide toda la cosa). Pruebas de Verizon Nota 4 ejecución de Lollipop 5.0.1

activity_pick.xml:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:theme="@style/AppTheme"
    tools:context="com.myapp.Pick"
    android:layout_height="match_parent"
    android:layout_width="match_parent">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:orientation="vertical">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/Ratings_Button"
            android:textSize="16dp"
            android:text="@string/Pick_Ratings_Button"
            android:onClick="onClick_Ratings"
            android:background="@android:drawable/btn_default"/>
</LinearLayout>
</ScrollView>

Pick.java:

public class Pick_Restaurant extends ActionBarActivity {
    public void onClick_Ratings (View v) {
        Intent intent = new Intent(mContext, Ratings.class);
        startActivityForResult(intent,RATINGS);
    }
}

construir.gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

defaultConfig {
    minSdkVersion 15
    targetSdkVersion 22
    versionCode 59
    versionName "0.6.4"
}

...

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:22.0.0'
    compile 'com.google.android.gms:play-services:7.0.0'
    compile files('libs/mobileservices-1.1.5.jar')
}

Completo Error en inicio de Sesión:

04-08 17:06:40.578    3508-3508/com.myapp.debug E/AndroidRuntime FATAL EXCEPTION: main
Process: com.myapp.debug, PID: 3508
java.lang.IllegalStateException: Could not find a method onClick_Ratings(View) in the activity class android.view.ContextThemeWrapper for onClick handler on view class android.widget.Button with id 'Ratings_Button'
at android.view.View$1.onClick(View.java:4234)
at android.view.View.performClick(View.java:5191)
at android.view.View$PerformClick.run(View.java:20916)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5974)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)
Caused by: java.lang.NoSuchMethodException: onClick_Ratings [class android.view.View]
at java.lang.Class.getMethod(Class.java:665)
at android.view.View$1.onClick(View.java:4227)
            at android.view.View.performClick(View.java:5191)
            at android.view.View$PerformClick.run(View.java:20916)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:145)
            at android.app.ActivityThread.main(ActivityThread.java:5974)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)
  • Que es extraño. Sólo un pensamiento, usted podría tratar de quitar la onClick desde el xml y llame a setOnClickListener() en su Actividad.
  • Tengo toda una aplicación de la pena de onClicks conjunto en mi XMLs. Realmente no estoy interesado en la recodificación. Esto es algo que ha funcionado bien durante meses y todavía es una forma recomendada de botones de control.
InformationsquelleAutor Scott | 2015-04-08

4 Comentarios

  1. 22

    Parece que este es un tema nuevo con Android 5.0.

    De este anwer, la eliminación de la Theme desde el layout xml solucionado este problema para ellos.

    Así que, en su caso, eliminar la theme de su diseño:

    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    <!--android:theme="@style/AppTheme"--> <!-- Remove this -->
    <!--................-->
    </ScrollView>

    Y añadir el tema en la AndroidManifest.xml lugar:

    android:theme="@android:style/AppTheme"
    • Oh hombre – estaba tan concentrado en la appcompat cambio no me di cuenta de que esto era probablemente la primera vez que había probado en una Piruleta dispositivo. Así que esta es una Piruleta problema y no una appcompat uno. El tema fix funciona!
    • El mismo error se produce cuando el tema es establecer mediante Programación. Ex. configuración de tema personalizado para un DialogFragment.
    • Vergüenza en Google! En mi caso esto sucede en el estándar de preferencias, así que no puedo eliminar su tema. ;-/
  2. 19

    Que acabo de responder una pregunta similar aquí

    Básicamente, ya que Android 5.0 las opiniones de cada uno puede ser de temática.

    Para facilitarlo, un ContextThemeWrapper se utiliza para modificar el tema de fondo asignado a la Activity y asignado como el Context de la View. Desde este Context es no su Activity más (el Activity tiene que ser independiente, ya que todavía tiene que devolver el original del tema) de las devoluciones de llamada no existen y se obtiene el error que ves.

    Si usted realmente no desea tema individual, vistas a la solución obvia es la de no hacerlo y el tema de la actividad en su lugar, como ya se ha sugerido.

    Si hacer, de hecho, quieren tema de las opiniones de cada uno, parece que la android:onClick atributo no puede ser utilizado y usted tendrá que volver a asignar manualmente una OnClickListener.

    La pregunta es, ¿por qué este trabajo pre Lollipop? Sólo puedo especular que debido a la funcionalidad para el tema de las opiniones de cada uno no existe, la aplicación de un theme atributo a una vista acaba de cambiar el tema por defecto en el Activity así.

    • Tienes razón acerca de por qué el trabajo antes de Lollipop. Y no va a funcionar con el apoyo de la biblioteca de cualquiera.
  3. 2

    Cosas que generalmente sucede cuando se declara onClick en xml como lo hizo:

    android:onClick="onClick_Ratings"

    Sólo asegúrese de que usted está usando este diseño en esa actividad. Debido a que la excepción está diciendo claramente que su actividad no tiene el correspondiente método que usted hizo mostrar que usted tiene:

    public void onClick_Ratings (View v) {
    Intent intent = new Intent(mContext, Ratings.class);
    startActivityForResult(intent,RATINGS);
    }

    También creo que se debe declarar la actividad en el xml como:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".SendMessageActivity">

    Y en realidad registro dice:

    No podía encontrar un método onClick_Ratings(Ver) en la clase de actividad
    android.vista.ContextThemeWrapper

    hay algo mal ya que android.view.ContextThemeWrapper no es un Activity y no la actividad de su xml com.myapp.Pick (supongo Pick es una actividad y no el fragmento). Tal vez intente limpiar el proyecto, ivalidate caché y reiniciar.

    Si nada ayuda sugiero volver a anteriores versión de apoyo lib usted había mencionado O para establecer onClickListener en el código en lugar de xml.

  4. 2

    La eliminación de android:tema de las obras. Pero esto es causado porque el uso de android:onclick en xml. Si utiliza onClick en el archivo Java, usted puede todavía utilizar android:tema.

    De acuerdo a su código,

    activity_pick.xml [Eliminar onclick aquí]

     <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/Ratings_Button"
    android:textSize="16dp"
    android:text="@string/Pick_Ratings_Button"        
    android:background="@android:drawable/btn_default" />

    Vaya a su Archivo Java, que es, pick.java en su caso:

        final Button button = (Button) findViewById(R.id.Ratings_Button);
    button.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
    Intent activityChangeIntent = new Intent(CurrentActivity.this, SecondActivity.class);
    SplashScreen.this.startActivity(activityChangeIntent);
    }
    });

    Experimentado el mismo error, la aplicación ha dejado de funcionar, cuando el material botón se hizo clic mediante programación a mí me ayudó. Echarle un vistazo 🙂

Dejar respuesta

Please enter your comment!
Please enter your name here