为啥我不能为对话框视图中的按钮设置 onClickListener?
Posted
技术标签:
【中文标题】为啥我不能为对话框视图中的按钮设置 onClickListener?【英文标题】:Why I can not set onClickListener for a button in a dialog view?为什么我不能为对话框视图中的按钮设置 onClickListener? 【发布时间】:2011-09-30 12:46:16 【问题描述】:我有一个自定义对话框,如下所述。
我的自定义对话框布局 (*my_dialog.xml*),只包含一个“关闭”按钮:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:layout_gravity="center_horizontal"
>
<Button
android:id="@+id/dismiss_btn"
android:layout_
android:layout_
android:layout_centerHorizontal="true"
android:text="Dismiss me"
android:textSize="8dip"
android:textColor="#ffffff"
/>
</RelativeLayout>
我的对话框视图类:
public class MyDialog extends Dialog
public MyDialog(Context context)
super(context);
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.my_dialog);
Button dismissMeBtn = (Button)findViewById(R.id.dismiss_btn);
/** ERROR Message when set onClickListener below (throw by eclipse editor)**/
// The method setOnClickListener(View.OnClickListener) in the
// type View is not applicable for the arguments (new DialogInterface.OnClickListener())
dismissMeBtn.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
MyDialog.this.dismiss();
);
getWindow().setLayout(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
正如上面的代码,我在对话框上有一个“*dismiss_btn*”按钮,我想在按下关闭按钮时关闭对话框,但我在我的setOnClickListener 用于关闭按钮时的代码(如代码中所示)。
错误信息(eclipse编辑器抛出的错误):
View类型中的setOnClickListener(View.OnClickListener)方法不适用于参数(new DialogInterface.OnClickListener())
为什么我得到了错误?为什么我不能为对话框视图中的按钮设置 onClickListener?
【问题讨论】:
【参考方案1】:因为 eclipse 认为它是 DialogInterface onClickListener 但你需要一个 View onClickListener 所以它会是
dismissMeBtn.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
MyDialog.this.dismiss();
);
【讨论】:
需要使用这种方法来实现“片段寻呼机”示例:developer.android.com/reference/android/support/v4/app/…。希望它可以帮助那里的人!【参考方案2】:那是因为你在DialogInterface
的上下文中,它自己有OnClickListener
接口。
你的代码应该是:
dismissMeBtn.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
MyDialog.this.dismiss();
);
【讨论】:
【参考方案3】:您的导入似乎有问题。
当您尝试创建新的 OnClickListener 时,您正在调用 DialogInterface.OnClickListener 的构造函数,这不是 Button 所需的 OnClickListener(可能是由于 import android.content.DialogInterface.OnClickListener
)
尝试使用new View.OnclickListener() ...
或将导入替换为import android.view.View.OnClickListener
,应该没问题。
【讨论】:
以上是关于为啥我不能为对话框视图中的按钮设置 onClickListener?的主要内容,如果未能解决你的问题,请参考以下文章
android 怎样设置单击一个按钮,不会重复弹出dialog
为啥我不能使用 onClick 在 jQuery $(document).ready 函数中执行函数?