Android onclick-Method异常

时间:2013-12-18 18:42:59

标签: android dialog

您好我得到以下异常,我不知道原因:无法在活动类android.view.ContextThemeWrapper中找到方法checkPassword(View),用于视图类android.widget.Button上的onClick处理程序id为'bPassword'

我使用Activtiy作为对话框。用户必须在对话框中键入密码,如果正确,则应调用另一个活动。这是我的代码:

我的XML文件:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="Enter your Password:"
            android:id="@+id/dText"/>
    <EditText
            android:layout_width="match_parent"
            android:paddingLeft="10dp"
            android:layout_height="wrap_content"
            android:inputType="textPassword"
            android:ems="10"
            android:id="@+id/ePassword"
            android:layout_marginLeft="-1dp"/>
    <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New Button"
            android:id="@+id/bPassword"
            android:onClick="checkPassword" />


</LinearLayout>

我的Java类:

package com.example.RemindMe;

import android.app.Activity;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;


public class DialogActivity extends Activity {

    private String password = "test";
    private EditText ePassword;
    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Dialog dialog = new Dialog(this);
        dialog.setContentView(R.layout.activity_dialog);
        dialog.setTitle("Note Activity is password protected");
        dialog.setCancelable(true);
        textView = (TextView) dialog.findViewById(R.id.dText);
        textView.setText("Message");

        dialog.show();


        dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
            public void onCancel(DialogInterface arg0){
                finish();
            }
        });

    }

    public void checkPassword(View view){
        switch (view.getId()){
            case R.id.bPassword:
                String pwEditText = ePassword.getText().toString();

                if(pwEditText.equals(password)){
                    //If password correct, start another activity
                startActivity (new Intent(getApplicationContext(), NoteActivity.class));
                } else {
                    textView.setText("Wrong Password, PLS Type it again");
                }
                break;
        }
    }
}

我知道密码不应该用作明文等等。这仅用于测试目的。我计划在sharedpref

中散列并存储密码

3 个答案:

答案 0 :(得分:3)

要让Activity Dialog出现,请将以下行添加到<activity>中相应Activity的{​​{1}}标记中。

manifest.xml

然后您可以移除所有android:theme="@android:style/Theme.Dialog" 代码,因为dialog位于onClick本身,而不是Activity,所以它应该有效。不要忘记在Dialog中添加setContentView(...)

答案 1 :(得分:0)

您必须在此活动中定义您想要的主题:

android:theme="@android:style/Theme.Dialog"

答案 2 :(得分:-1)

android:onClick="checkPassword"仅适用于活动中使用的按钮,因为checkPassword方法是在活动中声明的。

您应该避免直接实例化Dialog。相反,请使用AlertDialog。

从xml中删除该按钮并使用AlertDialog中的ok按钮。