- 浏览: 356170 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
nglxl:
点赞啊,必须点赞!!深度好文,解决了困扰我多年的疑惑。
tcp 长连接与短连接 -
cofftech:
opengl源码http://www.eyesourcecod ...
OPenGL ES 关键API小结 -
mail_j:
不是很好用,很多情况都不能处理 1、没有区分关键字的大小写2、 ...
Java解析sql语句,分析出调用到的所有表 -
a455642158:
就算监听到变成了cmwap还不行,还得监听网络连接状态Stat ...
android APN切换cmwap实现 -
xuhl1022:
看了您的android 4篇 浏览器二次开发,感触颇深,写的很 ...
Android浏览器Browser二次开发(四)浏览器中的APN切换
Android中的弹出框在被点击时, 无论点击哪个按钮都会关闭窗口。 但是有的情况下我们不需要立即关闭窗口。下面的情况是弹出框中要求用户输入文件名, 并在点击确定时检查文件名的合法性, 不合法则提示用户重新输入, 弹出框要保持在界面上。 点击取消时弹出框消失。 这里通过对控件的反射来实现:
/**our button handler**/
private ButtonHandler bHandler;
//pop up dialog with own button handler
private void popUpDialog(AlertDialog dialog) {
/*
* alert dialog's default handler will always close dialog whenever user
* clicks on which button. we have to replace default handler with our
* own handler for blocking close action.
* Reflection helps a lot.
*/
try {
Field field = dialog.getClass().getDeclaredField("mAlert");
field.setAccessible(true);
//retrieve mAlert value
Object obj = field.get(dialog);
field = obj.getClass().getDeclaredField("mHandler");
field.setAccessible(true);
//replace mHandler with our own handler
field.set(obj, bHandler);
} catch (SecurityException e) {
Debug.error(e.getMessage());
} catch (NoSuchFieldException e) {
Debug.error(e.getMessage());
} catch (IllegalArgumentException e) {
Debug.error(e.getMessage());
} catch (IllegalAccessException e) {
Debug.error(e.getMessage());
}
//we can show this dialog now.
dialog.show();
}
/*
* define our own button handler, do not deal with dismiss message.
*/
class ButtonHandler extends Handler {
private WeakReference<DialogInterface> mDialog;
public ButtonHandler(DialogInterface dialog) {
mDialog = new WeakReference<DialogInterface>(dialog);
}
public void handleMessage(Message msg) {
switch (msg.what) {
case DialogInterface.BUTTON_POSITIVE:
case DialogInterface.BUTTON_NEGATIVE:
case DialogInterface.BUTTON_NEUTRAL:
((DialogInterface.OnClickListener) msg.obj).onClick(mDialog
.get(), msg.what);
break ;
}
}
}
然后创建一个AlertDialog时如下去调用:
//create dialog
mDialog = new AlertDialog.Builder(mContext)
.setView(selectImageView)
.setNegativeButton(android.R.string.cancel, mOnDialogClickListener)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int arg1) {
//check input file name
if (isValidFileName(fileNameInput.getText().toString())) {
String fileName = fileNameInput.getText().toString().trim();
mediaList.get(0).setName(fileName);
saveMedia(mediaList);
dialog.dismiss();
} else {
Toast.makeText(mContext, R.string.invalid_file_name, 1500).show();
}
}
}).create();
mOnDialogClickListener用来处理关闭窗口事件:
/*
* cancel dialog listener
*/
OnClickListener mOnDialogClickListener = new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int buttonId) {
switch (buttonId) {
case DialogInterface.BUTTON_NEGATIVE:
dialog.dismiss();
break;
case DialogInterface.BUTTON_POSITIVE:
break;
}
}
};
这种通过反射的方法也是从网上学来的, 不知原创是谁了。 弱引用的目的是方便垃圾回收, 这里的引用只是为了设置下Dialog里面的控件, 用完以后以后就不再需要持有这个句柄了。 使用弱引用就不会影响到原来对这个控件的垃圾回收过程。
/**our button handler**/
private ButtonHandler bHandler;
//pop up dialog with own button handler
private void popUpDialog(AlertDialog dialog) {
/*
* alert dialog's default handler will always close dialog whenever user
* clicks on which button. we have to replace default handler with our
* own handler for blocking close action.
* Reflection helps a lot.
*/
try {
Field field = dialog.getClass().getDeclaredField("mAlert");
field.setAccessible(true);
//retrieve mAlert value
Object obj = field.get(dialog);
field = obj.getClass().getDeclaredField("mHandler");
field.setAccessible(true);
//replace mHandler with our own handler
field.set(obj, bHandler);
} catch (SecurityException e) {
Debug.error(e.getMessage());
} catch (NoSuchFieldException e) {
Debug.error(e.getMessage());
} catch (IllegalArgumentException e) {
Debug.error(e.getMessage());
} catch (IllegalAccessException e) {
Debug.error(e.getMessage());
}
//we can show this dialog now.
dialog.show();
}
/*
* define our own button handler, do not deal with dismiss message.
*/
class ButtonHandler extends Handler {
private WeakReference<DialogInterface> mDialog;
public ButtonHandler(DialogInterface dialog) {
mDialog = new WeakReference<DialogInterface>(dialog);
}
public void handleMessage(Message msg) {
switch (msg.what) {
case DialogInterface.BUTTON_POSITIVE:
case DialogInterface.BUTTON_NEGATIVE:
case DialogInterface.BUTTON_NEUTRAL:
((DialogInterface.OnClickListener) msg.obj).onClick(mDialog
.get(), msg.what);
break ;
}
}
}
然后创建一个AlertDialog时如下去调用:
//create dialog
mDialog = new AlertDialog.Builder(mContext)
.setView(selectImageView)
.setNegativeButton(android.R.string.cancel, mOnDialogClickListener)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int arg1) {
//check input file name
if (isValidFileName(fileNameInput.getText().toString())) {
String fileName = fileNameInput.getText().toString().trim();
mediaList.get(0).setName(fileName);
saveMedia(mediaList);
dialog.dismiss();
} else {
Toast.makeText(mContext, R.string.invalid_file_name, 1500).show();
}
}
}).create();
mOnDialogClickListener用来处理关闭窗口事件:
/*
* cancel dialog listener
*/
OnClickListener mOnDialogClickListener = new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int buttonId) {
switch (buttonId) {
case DialogInterface.BUTTON_NEGATIVE:
dialog.dismiss();
break;
case DialogInterface.BUTTON_POSITIVE:
break;
}
}
};
评论
4 楼
m331006
2011-08-16
楼主,为什么我对着写都不行的呢。。点击按钮时还是消失了。。。popUpDialog方法应该在哪里调用的??楼主看到了回我一下吧。。。急呢。谢谢了。
3 楼
bluecountry
2011-08-12
膜拜了楼主的大作之后,果断选择自定义对话框...
就2个按钮 不用那么纠结
当然了 思路还是要学习一下
就2个按钮 不用那么纠结
当然了 思路还是要学习一下
2 楼
seya
2011-04-07
ET焖猪仔 写道
学些了,楼主是怎么想到用反射的~ ?private WeakReference<DialogInterface> mDialog; 为什么这里用到弱引用? 期待解答~
这种通过反射的方法也是从网上学来的, 不知原创是谁了。 弱引用的目的是方便垃圾回收, 这里的引用只是为了设置下Dialog里面的控件, 用完以后以后就不再需要持有这个句柄了。 使用弱引用就不会影响到原来对这个控件的垃圾回收过程。
1 楼
ET焖猪仔
2011-03-29
学些了,楼主是怎么想到用反射的~ ?private WeakReference<DialogInterface> mDialog; 为什么这里用到弱引用? 期待解答~
发表评论
-
基于Java NIO的手机答题游戏开发
2014-03-31 17:59 1704先上个游戏截图: 豌豆荚地址: http://apps.w ... -
enable android deviceconnection under linux
2013-04-24 15:45 961开发环境搭建完毕,Eclipse,Java,ADT都已经折腾 ... -
set CCache for building android source code
2013-04-24 15:14 1151Setting up ccache You can opti ... -
android 源码下载403 forbidden, 406 not acceptable 错误
2013-04-24 08:46 2412解决方法 1. 浏览器登录https://android.g ... -
ubuntu11.10 编译android4.0 错处
2013-04-08 21:45 1185今天使用ubuntu11.10编译android4.0出现以下 ... -
常用WebService列表
2013-01-31 23:22 2600快递查询接口 http://webservice.36wu.c ... -
startActivityForResult 无响应问题
2013-01-24 13:57 3718今天开发遇到了个问题, 就是从一个Activity中使用sta ... -
Android中仿新浪微博刷新列表
2012-11-22 17:35 7312大家看到新浪微博中的列表往下拉的时候, 头部出现正在刷新,然后 ... -
Grid调整间距
2012-09-29 08:52 1685今天使用GridView, 发现点中某一Item时选中部分的背 ... -
android gallery和Animation组合使用, 看美女美图
2012-09-11 21:01 4337今天主要探究Gallery和Animation的使用。 制作一 ... -
Android执行 shell command
2012-03-24 17:00 7212Android执行shell命令 一、方法 1. /* ... -
BBBBBB111
2012-03-23 11:42 10陈波: 本周:代码review,解决findbugs中bug以 ... -
MonkeyTestError
2012-03-21 10:15 903-20 21:36:42.439 W/dalvikvm( ... -
INSTALL_FAILED_OLDER_SDK ERROR
2012-03-12 15:52 4390Install APK with adb: $ platfo ... -
4.0源码编译问题
2012-03-07 17:12 31191、fatal error: GL/glx.h: No suc ... -
4.0 编译apk中无classes.dex
2012-03-07 17:11 3898下载完android 4.0代码,模拟器里面的gallery不 ... -
Android 4.0源码编译错误
2012-03-05 10:19 2540UNEXPECTED TOP-LEVEL EXCEPTION: ... -
AndroidLockScreenDemo
2012-02-18 15:54 925锁屏解锁的成功案例。 -
G14 root权限获取
2012-02-13 23:36 2821HTC G14 ROOT权限获取后就能删除系统自带的程序,相信 ... -
锁屏d ds
2011-12-15 00:49 838private final IDevicePolicyMana ...
相关推荐
android自定义弹出框的实现。 平时做项目时,感觉android自带的弹出框样式比较丑,很多应用都是自己做的弹出框,这里也试着自己做了一个。
android弹出框动画效果,转自别人,在此感谢
android自定义弹出框实现(修改版).zip
android全屏弹出框,AlertDialog
Android炫酷弹出框LemonBubble控件
Android弹出框。
android自定义弹出框android自定义弹出框android自定义弹出框android自定义弹出框android自定义弹出框android自定义弹出框android自定义弹出框android自定义弹出框android自定义弹出框android自定义弹出框android...
安卓的各种弹出框,普通消息框、确定框、输入框、单选框、复选框、列表框、图片框,有兴趣的朋友可以看看
android蓝牙使用,弹出框选择,获取名字和地址
一个Android登录界面的制作范例,以Android dialog方式实现的弹出式登录框,并包括了帐号密码保存、加密算法等模块源码。本登录源码将对密码信息进行AES加密算法加密后保存,有些功能需要服务器配合才能看到,比如...
一个动态的弹出框,可以做动态提示什么的,自定义布局放入就可以。使用非常简单,并且做了性能上的优化,内存占用较小。但是发现个长时间弹出内存会升高,暂未发现原因
android弹出框和加载等待效果,自持自定以等待样式,和弹出样式
想做一个客户端的弹出框 ,并且在弹出框内添加listview展示列表
android自定义弹出框的实现。 平时做项目时,感觉android自带的弹出框样式比较丑,很多应用都是自己做的弹出框,这里也试着自己做了一个。
Android:动画实现精美的弹出框(仿易信) 对应博文:http://blog.csdn.net/books1958/article/details/45219923
android 弹出窗口android 弹出窗口
可自定义布局的底部弹出框
Android 自定义弹出框,自定义取消和确定。
Android 单击listview弹出popupwindow弹出框,里面还附带listview右滑删除按钮。博客网址:http://blog.csdn.net/qq_16064871