DialogFragment和AlertDialog的使用
来源:互联网 发布:网络本科文凭有用 编辑:程序博客网 时间:2024/05/22 12:06
package com.example.fragments;import java.lang.ref.WeakReference;import java.lang.reflect.Field;import android.app.AlertDialog;import android.app.Dialog;import android.content.Context;import android.content.DialogInterface;import android.content.DialogInterface.OnClickListener;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v4.app.DialogFragment;import android.support.v4.app.FragmentManager;/** * <p> * 关于DialogFragment的使用 * </p> * 下午5:38:45 * * @auther delvikCoder */public class CustomFragment extends DialogFragment {private static Context mContext;private AlertDialog alertDialog;@Overridepublic Dialog onCreateDialog(Bundle savedInstanceState) {String str = getArguments().getString("title");alertDialog = new AlertDialog.Builder(mContext,AlertDialog.THEME_HOLO_LIGHT).setTitle(str).setMessage("这是个测试DialogFragment的列子").setPositiveButton("确定", new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}}).setNegativeButton("取消", new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}}).setCancelable(false).create();setButtonUseless();return alertDialog;}@Overridepublic void show(FragmentManager manager, String tag) {super.show(manager, tag);}/** * <p> * 这里利用反射使我们的AlertDialog在没特定使其消失情况下,点击按钮不消失 具体看:<a * href="http://blog.csdn.net/abby_dcy/article/details/6049535">看博客</a> * </p> * void */public void setButtonUseless() {Field field;try {field = alertDialog.getClass().getDeclaredField("mAlert");field.setAccessible(true);Object obj = field.get(alertDialog);field = obj.getClass().getDeclaredField("mHandler");field.setAccessible(true);field.set(obj, new ButtonHandler(null));} catch (NoSuchFieldException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}}private static final class ButtonHandler extends Handler {// Button clicks have Message.what as the BUTTON{1,2,3} constantprivate static final int MSG_DISMISS_DIALOG = 1;private WeakReference<DialogInterface> mDialog;public ButtonHandler(DialogInterface dialog) {mDialog = new WeakReference<DialogInterface>(dialog);}@Overridepublic 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;// 下面这两句导致dialog消失// case MSG_DISMISS_DIALOG:// ((DialogInterface) msg.obj).dismiss();}}}/** * <p> * 标题 * </p> * * @param title * @return Fragment */public static CustomFragment getFragment(Context context, String title) {mContext = context;CustomFragment fragment = new CustomFragment();Bundle b = new Bundle();b.putString("title", title);fragment.setArguments(b);return fragment;}}
Button btn = (Button) findViewById(R.id.button1ss);btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {CustomFragment customFragment = (CustomFragment) CustomFragment.getFragment(MainActivity.this,"AlertDialog.THEME_HOLO_LIGHT");customFragment.show(getSupportFragmentManager(), "");}});
然后看几个效果:下面分别对应AlertDialog中的几种Theme
THEME_DEVICE_DEFAULT_LIGHT,THEME_TRADITIONAL,THEME_DEVICE_DEFAULT_DARK,THEME_HOLO_LIGHT
默认AlertDialog不管点击那个按钮都会消失,设置AlertDialog不消失,而有时候我们不想其消失:
/** * <p> * 这里利用反射使我们的AlertDialog在没特定使其消失情况下,点击按钮不消失 具体看:<a * href="http://blog.csdn.net/abby_dcy/article/details/6049535">看博客</a> * </p> * void */public void setButtonUseless() {Field field;try {field = alertDialog.getClass().getDeclaredField("mAlert");field.setAccessible(true);Object obj = field.get(alertDialog);field = obj.getClass().getDeclaredField("mHandler");field.setAccessible(true);field.set(obj, new ButtonHandler(null));} catch (NoSuchFieldException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}}
static int resolveDialogTheme(Context context, int resid) { if (resid == THEME_TRADITIONAL) { return com.android.internal.R.style.Theme_Dialog_Alert; } else if (resid == THEME_HOLO_DARK) { return com.android.internal.R.style.Theme_Holo_Dialog_Alert; } else if (resid == THEME_HOLO_LIGHT) { return com.android.internal.R.style.Theme_Holo_Light_Dialog_Alert; } else if (resid == THEME_DEVICE_DEFAULT_DARK) { return com.android.internal.R.style.Theme_DeviceDefault_Dialog_Alert; } else if (resid == THEME_DEVICE_DEFAULT_LIGHT) { return com.android.internal.R.style.Theme_DeviceDefault_Light_Dialog_Alert; } else if (resid >= 0x01000000) { // start of real resource IDs. return resid; } else { TypedValue outValue = new TypedValue(); context.getTheme().resolveAttribute(com.android.internal.R.attr.alertDialogTheme, outValue, true); return outValue.resourceId; } }
private AlertController mAlert;
0 0
- DialogFragment和AlertDialog的使用
- Android官方推荐使用DialogFragment替换AlertDialog
- Android官方推荐使用DialogFragment替换AlertDialog
- DialogFragment和ListFragment使用
- Android开发——官方推荐使用DialogFragment替换AlertDialog
- Android:DialogFragment的使用
- ApiDemos--DialogFragment的使用
- DialogFragment的使用示例
- DialogFragment的相关使用
- Dialogfragment的使用
- Android-----DialogFragment的使用
- dialogfragment 的使用
- DialogFragment && NumberPicker的使用
- DialogFragment的使用
- DialogFragment的简单使用
- DialogFragment的使用
- PopupWindow和AlertDialog的使用和区别
- Android中AlertDialog和Toast的使用
- 快速排序c实现
- 学习perl
- HDU 1259(水题)
- easyUI 中datatGrid操作
- frameset中的frame去除进度条
- DialogFragment和AlertDialog的使用
- gets函数的漏洞
- CreateJS 与 Cocos2d-HTML5 的比较
- 重写ViewGroup实现App第一次启动向导
- 【机器学习】K-MEANS算法探究
- s5pv210 android4.0.3调试,如何去掉SGX540硬件加速
- HDU 1261(全排列,大数乘除)
- occas resources security初探
- Hibernate学习笔记之EHCache的配置