Can't find onClick method

匿名 (未验证) 提交于 2019-12-03 08:44:33

问题:

So, I'm getting this error

11-15 16:55:40.617: E/AndroidRuntime(316): java.lang.IllegalStateException: Could not find a method ingresarBtnClick(View) in the activity class android.view.ContextThemeWrapper for onClick handler on view class android.widget.Button with id 'ingresarButton' 

This is my layout 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:weightSum="1" android:id="@+id/Login">     <TextView android:layout_width="wrap_content" android:id="@+id/textView1" android:textAppearance="?android:attr/textAppearanceLarge" android:text="Número de Lecturista" android:layout_height="wrap_content"></TextView>     <EditText android:inputType="number" android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/numLecEditText" android:maxLength="4">         <requestFocus></requestFocus>            </EditText>     <TextView android:layout_width="wrap_content" android:id="@+id/textView2" android:textAppearance="?android:attr/textAppearanceLarge" android:layout_height="wrap_content" android:text="PIN"></TextView>     <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="number" android:password="true" android:id="@+id/pinEditText" android:maxLength="4"></EditText>     <TableRow android:id="@+id/tableRow1" android:layout_width="match_parent" android:layout_height="wrap_content">         <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Ingresar" android:id="@+id/ingresarButton" android:onClick="ingresarBtnClick"></Button>         <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Salir" android:id="@+id/salirButton" android:onClick="salirBtnClick"></Button>         <Button android:id="@+id/opcionesButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Opciones" android:onClick="opcionesBtnClick" ></Button>     </TableRow> </LinearLayout> 

And this is my code

import android.app.Dialog; import android.view.View; import android.widget.EditText;  public class FormaLogin extends Dialog {     SisLec sisLec;      public FormaLogin(SisLec _sisLec)     {                super(_sisLec);              sisLec = _sisLec;                setTitle("Identificación de Lecturista");     }      public void mostrar()     {         setContentView(R.layout.login);         show();     }      public void ingresarBtnClick(View view)     {         EditText numLecTxt = (EditText) sisLec.findViewById(R.id.numLecEditText);         EditText pinTxt = (EditText) sisLec.findViewById(R.id.pinEditText);          if(numLecTxt.getText().length() > 0)         {             if(pinTxt.getText().length() > 0)             {                 if(numLecTxt.getText().equals("1337"))                 {                     if(pinTxt.getText().equals("8383"))                     {                         //sisLec.frmMantenimiento.mostrar();                     }                 }                 else                 {                     HiloIdentificacion hiloIden = new HiloIdentificacion();                     hiloIden.identificacion(numLecTxt.getText().toString(), pinTxt.getText().toString());                 }             }             else                 sisLec.mensaje("Debe de ingresar su pin");         }         else             sisLec.mensaje("Debe de ingresar su número de Lecturista");     }      public void salirBtnClick(View view)     {         sisLec.salir();     }      public void opcionesBtnClick(View view)     {         // TODO: Agregar método que muestre la forma de Opciones     }      private class HiloIdentificacion extends Thread     {         private String usuario, pass;          public synchronized void run()         {             try             {                 sisLec.identificacion(usuario, pass);             }             catch(Exception e)             {                 // TODO: Agregar registro de error             }                            }          public synchronized void identificacion(String _usuario, String _pass)         {             usuario = _usuario;             pass = _pass;             run();         }     } } 

The method assigned to the button "ingresarButton", "ingresarBtnClick(View view)" is there, as the Androir documentation suggest http://developer.android.com/guide/topics/ui/ui-events.html but sill I'm getting the error.

Does it has anything to do that i'm showing this layout on a Dialog?

SisLec is my Activity class

回答1:

android:onClick in the xml routes the event to the method in the activity. But your method is not in the activity, its in your Dialog class. You'll need to either have your activity forward the call to the instance of the Dialog, or have the dialog code register itself as the onClick listener instead of trying to set it in the layout.



回答2:

The onClick method needs to be in the Activity class.



回答3:

Try setContentView(sisLec.getLayoutInflater().inflate(R.layout.login,null));

Also read this: http://android-developers.blogspot.com/2012/05/using-dialogfragments.html



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!