关于dialog对话框中按键的点击事件选择

如果在dialog对话框中添加一个按钮,那么它对应的点击事件应该回调View.OnClickListener()方法呢还是DialogInterface.OnClickListener()方法呢?

 1 /* 创建对话框 */
 2 public void showdialog(String title, String message){
 3     AlertDialog.Builder builder = new Builder(this);
 4     builder.setIcon(R.drawable.ic_launcher);
 5     builder.setTitle(title);
 6     builder.setMessage(message);
 7     builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
 8
 9             @Override
10             public void onClick(DialogInterface dialog, int which) {
11
12
13             }
14         });
15         builder.create().show();
16
17 }

其实答案很简单,看下setPositiveButton的关联代码:

 1         /**
 2          * Set a listener to be invoked when the positive button of the dialog is pressed.
 3          * @param text The text to display in the positive button
 4          * @param listener The {@link DialogInterface.OnClickListener} to use.
 5          *
 6          * @return This Builder object to allow for chaining of calls to set methods
 7          */
 8         public Builder setPositiveButton(CharSequence text, final OnClickListener listener) {
 9             P.mPositiveButtonText = text;
10             P.mPositiveButtonListener = listener;
11             return this;
12         }

O(∩_∩)O代码中已经标注的很清楚了,这里的第二个param应该使用DialogInterface.OnClickListener,而针对View.OnClickListener和DialogInterface.OnClickListener的区别,来看看关联代码:

DialogInterface.OnClickListener

 1     /**
 2      * Interface used to allow the creator of a dialog to run some code when an
 3      * item on the dialog is clicked..
 4      */
 5     interface OnClickListener {
 6         /**
 7          * This method will be invoked when a button in the dialog is clicked.
 8          *
 9          * @param dialog The dialog that received the click.
10          * @param which The button that was clicked (e.g.
11          *            {@link DialogInterface#BUTTON1}) or the position
12          *            of the item clicked.
13          */
14         /* TODO: Change to use BUTTON_POSITIVE after API council */
15         public void onClick(DialogInterface dialog, int which);
16     }

View.OnClickListener

 1     /**
 2      * Interface definition for a callback to be invoked when a view is clicked.
 3      */
 4     public interface OnClickListener {
 5         /**
 6          * Called when a view has been clicked.
 7          *
 8          * @param v The view that was clicked.
 9          */
10         void onClick(View v);
11     }

喏,写的很清楚了,一个是dialog中的button被clicked了调用,一个是View被clicked了回调。

理解这么多,后期再补充............

时间: 2024-10-16 18:28:37

关于dialog对话框中按键的点击事件选择的相关文章

在vue中使用tinymce富文本编辑器,解决tinymce在dialog对话框中层级太低的问题

1.安装 npm install tinymce -S 2.把node_modules\tinymce里面的文件 包括tinymce文件夹 全部复制到static文件夹下面,如下图 3.tinymce默认是英文界面,还需要下载一个中文语言包zh_CN.js https://www.tiny.cloud/get-tiny/language-packages/ 在tinymce文件夹下新建langs文件夹,将下载好的语言包放到langs文件夹下面如图  4.在main.js中引入tinymce  5

[android篇]textview中片段响应点击事件(SpannableString)

项目需求 点击textView中的一小段文字,弹一个dialog框 失败解决方案 刚开始是用了两个textView水平布局,可想而知,当第一个textView快占满一行,还未换行时,第二个textView很可能出现换行排版问题 用spannableString的问题 小段文字有下划线 点击textView中的小段文字时,系统会当做url处理,给点击部分的text加一个蓝色的背景 解决方案 public class TouchableSpan extends ClickableSpan { pri

Android中按钮的点击事件的四种写法

如题,在Android中按钮的点击事件有四种写法,如下图. 界面为四个Button+一个TextView+一个ImageView activity_main布局文件如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="

Mint-ui中loadmore(上拉加载下拉刷新)组件在ios中滑动会触发点击事件的解决方法

bug说明: Mint-ui中loadmore(上拉加载下拉刷新)组件 在 使用fastclick的情况下 ,在ios设备中滑动会触发点击事件: 解决方法: 我是按需引入,去项目中找到loadmore下的index.js,全部引入的要找mint下面mint-ui.common.js 路径如下:你的项目名/node_modules\mint-ui\lib\loadmore\index.js 搜索 handleTouchEnd ,记得写event进去 handleTouchEnd: function

android 往dialog中加入listview,并实现listview中item的点击事件

LinearLayout linearLayoutMain = new LinearLayout(this);//自定义一个布局文件 linearLayoutMain.setLayoutParams(new LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); ListView listView = new ListView(this);//this为获取当前的上下文 listView.setFadingEdg

Android实例-手机安全卫士(十二)-制作输入密码对话框并设置相应点击事件

一.目标. 自定义输入密码对话框,根据输入的密码与保存着的密码进行判断. 二.代码实现. 1. 采用第十节的方法自定义一个输入密码的对话框. 2.为按钮设置点击事件,主要介绍“确认”按钮的点击事件. ①.通过TextView对象的getText()得到文本并通过toString()转成字符串再通过trim()去除空格,得到String对象的输入密码: ②.通过SharedPreferences对象的getString(String key, String defValue)获得保存着的密码,参数

android中多次点击事件的实现

1.在android系统中,设置里面->关于手机->安卓版本(即android version),三击后会出现android该个版本的版本号,以及一些动图,算是一个彩蛋吧! 2.导入setting源代码,ctrl+h搜索文件(关键字Android Version),搜索到了之后打开xml文件 3.是一个strings.xml文件,再次找到关键字firmware_version,再搜索.找到src下的源代码文件 4.又找到一个关键字KEY_FIRMWARE_VERSION,翻一翻找到关于多次点击

在ViewHolder中添加item点击事件接口(自定义

在Adapter中定义接口并提供回调static class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder> { private List<String> mList; private Context mContext; private OnItemClickListener mOnItemClickListener; public HomeAdapter(List<String> l

使用jquery中的click点击事件时出现重复问题的解决

枪响之后,没有赢家. 疫情之时,没有能闲着的医疗相关人员. 别误会,我不是医疗工作者,只是我们做的项目跟医疗服务相关,在这个时候,又怎么能置身事外呢. 所以就开始加班加点呀,嗯.....加的头昏脑胀,代码都写的有点不顺溜了. 之前做的一个项目,有点问题,点击选项的次数过多的时候会卡住,前天一直没发现问题在哪,今天在翻新的时候找到原因了. 由于选项都是获取数据渲染上去的,点击事件也是在渲染完成后绑定上去的,所以造成了重复触发点击的情况,导致点击次数过多时,页面会卡住. 搜了一下找到了解决方法,由于