Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can't find onClick method

Tags:

android

button

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

like image 589
CJLopez Avatar asked Nov 15 '11 16:11

CJLopez


People also ask

How to create onClick method in Android?

To define the click event handler for a button, add the android:onClick attribute to the <Button> element in your XML layout. The value for this attribute must be the name of the method you want to call in response to a click event. The Activity hosting the layout must then implement the corresponding method.

How to set onClick listener in Android?

Link the button from the XML by calling findViewById() method and set the onClick listener by using setOnClickListener() method. setOnClickListener takes an OnClickListener object as the parameter. Basically it's creating an anonymous subclass OnClickListener in the parameter.

How to use onClick listener?

In Android, the OnClickListener() interface has an onClick(View v) method that is called when the view (component) is clicked. The code for a component's functionality is written inside this method, and the listener is set using the setOnClickListener() method.


2 Answers

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.

like image 108
superfell Avatar answered Sep 21 '22 18:09

superfell


The onClick method needs to be in the Activity class.

like image 30
Jonathan Schneider Avatar answered Sep 19 '22 18:09

Jonathan Schneider