Не могу найти метод onClick - PullRequest
6 голосов
/ 15 ноября 2011

Итак, я получаю эту ошибку

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'

Это мой макет 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>

А это мой код

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();
        }
    }
}

Метод, назначенный кнопке «ingresarButton», «ingresarBtnClick (View view)», существует, поскольку документация Androir предлагает http://developer.android.com/guide/topics/ui/ui-events.html, но, тем не менее, я получаю ошибку.

Имеет ли это какое-либо отношение к тому, что я показываю этот макет в диалоге?

SisLec - мой класс занятий

Ответы [ 3 ]

10 голосов
/ 15 ноября 2011

android: onClick в xml направляет событие методу в упражнении. Но ваш метод не в активности, а в вашем классе Dialog. Вам нужно будет либо направить вашу активность на вызов экземпляра Dialog, либо сделать так, чтобы код диалога регистрировался как прослушиватель onClick, а не пытался установить его в макете.

4 голосов
/ 15 ноября 2011

Метод onClick должен находиться в классе Activity.

0 голосов
/ 08 июля 2012

Попробуйте setContentView(sisLec.getLayoutInflater().inflate(R.layout.login,null));

Также прочитайте это: http://android -developers.blogspot.com / 2012/05 / using-dialogfragments.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...