我正在尝试学习自定义对话框。我用一个按钮做了一个,它很好,我可以在构造函数和onCreate方法中点击断点,但是当我点击按钮时它崩溃而没有到达按钮处理程序。
对话框布局XML(my_dialog_layout.xml)是:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button
android:id="@+id/AButton"
android:layout_width="100px"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginLeft="10px"
android:onClick="AButtonHandler"
android:text="Click Me"
/>
<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_toLeftOf="@id/AButton"
android:text="Click this button: "
/>
/>
...而Dialog的java文件是:
import android.os.Bundle;
import android.widget.Toast;
import android.view.View;
import android.content.Context;
import android.app.Dialog;
public class MyDialog extends Dialog {
public MyDialog(Context context) {
super(context);
setContentView(R.layout.my_dialog_layout);
}
public void AButtonHandler(View target) {
int i = 0; // just a placeholder to set a breakpoint at
i++; // " "
// Toast.makeText(this, "in AButtonHandler", Toast.LENGTH_LONG).show();
MyDialog.this.dismiss();
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Toast.makeText(this, "Dialog onCreate", Toast.LENGTH_LONG).show();
}
}
当我点击AButton时,它会在调试器中崩溃,然后在AButtonHandler中使用“断点”
线程[&lt; 1&gt; main](暂停(异常IllegalStateException))
查看$ 1.onClick(查看)行:2059
按钮(查看).performClick()行:2408
......“
还要注意已注释掉的Toast's。我想把Toasts放进去,但是编译器给了我: Toast类型中的方法makeText(Context,CharSequence,int)不适用于参数(MyDialog, String,int)我做错了什么?
提前致谢!
答案 0 :(得分:3)
第二个问题:对话框不是上下文。它有一个Context。使用Toast.makeText(getContext(), ...)
。
第一个问题:同样的事情。该方法需要在活动中,而不是对话框中。 (我应该提一下,我从未在对话框中尝试onClick
。您可能需要使用传统的OnClickListener
。)
旁注:函数名称应以小写字母开头。
答案 1 :(得分:0)
在做了一些搜索之后我发现了这个:
Using onClick attribute in layout xml causes a NoSuchMethodException in Android dialogs
......与我的症状完全相同! ......显然我正在努力做的事情是行不通的。这太糟糕了 - android:onClick - 非常方便。
我会给eBoMike这个答案,因为他把我拉到Toast上,他至少提到了android:onClick可能有问题的可能性。