Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


No se pudo encontrar un método onClick_Foo (Ver) – la primera vez que se ejecuta en Android Lollipop

Tengo una aplicación que tiene alrededor de un año de edad, está en la tienda de Play en beta, ha pasado por docenas de revisiones. De repente estoy recibiendo un error:

No se pudo encontrar un método onClick_Foo (Ver) en la clase de actividad android.view.ContextThemeWrapper para onClick handler on view class android.widget.Button con id 'Foo_Button'

Estoy recibiendo este error en cada uno de los 7 botones definidos en mi XML. Desde ayer he actualizado appcompat-v7 de 21.0.3 a 22.0.0 pero también he actualizado mi dispositivo de prueba de KitKat a Lollipop por primera vez.

He comprobado la ortografía, las capitalizaciones, ninguno de los sospechosos habituales explica esto. Aquí hay una muestra del código correspondiente. Avísame si te sientes más útil. (La actividad tiene 915 líneas de código y el xml 186, así que no pidas todo el asunto). Pruebas en un Verizon Note 4 ejecutando 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); } } 

build.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') } 

Error completo en el registro:

 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) 

  • Inicie otra actividad haciendo clic en un botón
  • ((Botón)) dentro de un servicio no funciona
  • Android ClickableSpan obtener texto onClick ()
  • Android para detectar cuando se mantiene pulsado un botón
  • Android: No se puede obtener un encabezado / pie de lista ListView que se puede hacer clic
  • ¿Cómo exactamente el atributo android: onClick XML difiere de setOnClickListener?
  • OnItemClickListener usando ArrayAdapter para ListView
  • Android: El botón personalizado OnClickListener no se invoca
  • 4 Solutions collect form web for “No se pudo encontrar un método onClick_Foo (Ver) – la primera vez que se ejecuta en Android Lollipop”

    Parece que este es un nuevo problema con Android 5.0.

    De esta anwer , quitando el Theme del xml de la disposición fijó este problema para ellos.

    Así que en su caso, elimine el 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ñade el tema en el AndroidManifest.xml:

     android:theme="@android:style/AppTheme" 

    Acabo de responder una pregunta similar aquí

    Básicamente, desde Android 5.0 vistas individuales pueden ser temáticas .

    Para facilitar esto, un ContextThemeWrapper se utiliza para modificar el tema subyacente asignado a la Activity y asignado como el Context de la View . Dado que este Context ya no es tu Activity (la Activity tiene que estar separada porque todavía tiene que devolver el tema original) las devoluciones de llamada no existen y obtienes el error que ves.

    Si en realidad no quieres abordar las vistas individuales, la solución obvia es no hacerlo y, en su lugar, sugerir la actividad.

    Si de hecho desea mostrar vistas individuales, parece que el atributo android:onClick no se puede utilizar y tendrá que volver a asignar manualmente un OnClickListener .

    La pregunta es, ¿por qué este trabajo pre Lollipop? Sólo puedo especular que debido a la funcionalidad de las vistas individuales de tema no existía, la aplicación de un atributo de theme a una vista sólo cambiar el tema por defecto en la Activity también.

    Eliminación de android: funciona el tema. Pero esto se debe a que el uso de android:onclick en xml. Si utiliza onClick en un archivo de Java, puede usar android: theme .

    Según 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, es decir, a 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 botón de material se hizo clic programáticamente me ayudó. Echale un vistazo 🙂

    Tales cosas suceden generalmente cuando usted declara onClick en xml como usted hizo:

     android:onClick="onClick_Ratings" 

    Sólo asegúrese de que está utilizando este diseño en esa actividad. Debido a que la excepción es claramente decir que su actividad no tiene el método correspondiente que ha demostrado que tiene:

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

    También supongo que deberías declarar la actividad en tu 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 log dice:

    No se pudo encontrar un método onClick_Ratings (Ver) en la clase de actividad android.view.ContextThemeWrapper

    hay algo mal desde android.view.ContextThemeWrapper no es una Activity y no la actividad de su xml com.myapp.Pick (asumo Pick es una actividad y no el fragmento). Tal vez tratar de limpiar el proyecto, ivalidate cachés y reiniciar.
    Si nada ayuda te sugiero que vuelvas a la versión previuos de la librería de soporte que mencionaste O para establecer onClickListener en código en lugar de xml.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.