【问题标题】:Android newbie learning dialogs = CRASHAndroid 新手学习对话框 = CRASH
【发布时间】:2010-11-30 20:44:40
【问题描述】:

我正在尝试学习自定义对话框。我做了一个,里面有一个按钮,它运行良好,我可以在构造函数和 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 中到达我的断点,并带有“ 线程 [ main](暂停(异常 IllegalStateException))
查看$1.onClick(查看) 行:2059 Button(View).performClick() 行:2408
……”

还要注意注释掉的 Toast's。我想把 Toasts 放进去,但是你的编译器给了我:Toast 类型中的方法 makeText(Context, CharSequence, int) 不适用于参数(MyDialog, String, int) 我做错了什么?

提前致谢!

【问题讨论】:

  • 为什么是MyDialog.this.dismiss()?您在 MyDialog 中,而不是内部类。这是您使用 OnClickListener 时的遗留问题吗?
  • 其实是的。我将其更改为 this.dismiss()。并不是说它曾经到达那里 8-)

标签: android


【解决方案1】:

第二个问题:对话框不是上下文。它有一个上下文。使用Toast.makeText(getContext(), ...)

第一个问题:同样的事情。该方法需要在活动中,而不是对话框中。 (我应该提一下,我从未在对话中尝试过onClick。您可能需要使用传统的OnClickListener。)

旁注:函数名称应以小写开头。

【讨论】:

  • 感谢 Toasts 的提示! (它有效)但我不明白按钮处理程序部分。我不知道在 Android 中对话框的按钮处理程序不在对话框类中。所以我将 AButtonHandler 移到了 Activity 中,我遇到了同样的崩溃。在 View$1 中(我假设它是 AButton,因为 idText 说“带有 id'AButton'”)错误是 NoSuchMethodEcxeption。这是否意味着我不能在对话框布局中执行 android:onClick ??
  • 从未尝试过,但听起来它在对话框中实际上会起作用(因为您之前遇到过不同的异常)。但是, android:onClick 的文档专门说“您的上下文的方法”- Dialog 不是上下文。就个人而言,我总是使用OnClickListener 进行对话。
【解决方案2】:

在进行了更多搜索后,我发现了这一点:

Using onClick attribute in layout xml causes a NoSuchMethodException in Android dialogs

...和我的症状一模一样! ...所以显然我正在尝试做的事情是行不通的。太糟糕了——android:onClick——非常方便。

我将在这方面给予 eBoMike 答案,因为他在 Toast 上让我理顺了,他至少暗示了 android:onClick 存在问题的可能性。

【讨论】:

    猜你喜欢
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多