Android新手学习对话框= CRASH

时间:2010-11-30 20:44:41

标签: android

我正在尝试学习自定义对话框。我用一个按钮做了一个,它很好,我可以在构造函数和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)我做错了什么?

提前致谢!

2 个答案:

答案 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可能有问题的可能性。