您好我得到以下异常,我不知道原因:无法在活动类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
中散列并存储密码答案 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按钮。