`
yxwang0615
  • 浏览: 560871 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

通过反射重新设置设置Dialog

 
阅读更多

通过反射重新设置Dialog:

//通过反射得到dialog对象
field = dialog.getClass().getSuperclass().getDeclaredField(“mShowing”);
filed.setAccessible(true);//取消默认 Java 语言访问控制检查,这样可以调用外部的private方法
field.set(dialog, true);//dialog消失
field.set(dialog, false);//dialog不消失

 
代码示例, 使用showDialog(int dialogid)方法提示是否清空EdutText的内容:

 

 

public classDialogTest extends Activity {
private static final int DIALOG_CLEAN = 1; // 清空文字
private EditText edit; //要提交的内容

@Override
	protected void onCreate(Bundle icicle) {
		super.onCreate(icicle);
		setContentView(R.layout.bbs_topic_new_activity);
                //初始化控件
                ...
                edit.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				clean();
			}
		});
       }
	
@Override
	protected Dialog onCreateDialog(int id) {
		Builder builder = null;
		switch (id) {
		case DIALOG_CLEAN:
			builder = new AlertDialog.Builder(this)
					.setTitle("提示")
					.setMessage("确认清除全部内容?")
					.setPositiveButton("确定",
							new DialogInterface.OnClickListener() {
								@Override
								public void onClick(DialogInterface dialog,
										int which) {
									edit.setText("");
								}
							})
					.setNeutralButton("取消",
							new DialogInterface.OnClickListener() {

								@Override
								public void onClick(DialogInterface dialog,
										int which) {
									disappearDialog(dialog);
								}
							});
			break;

		default:
			break;
		}
		return builder.create();
	}
	/**
	 * 清除文字
	 */
	private void clean() {
		String content = edit.getText().toString();
		if (!content.equals("")) {
			showDialog(DIALOG_CLEAN);

		}
	}
	private void disappearDialog(DialogInterface dialog) {
		try {
			Field field = dialog.getClass().getSuperclass()
					.getDeclaredField("mShowing");
			field.setAccessible(true);
			field.set(dialog, true);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}	
 

 

   -

分享到:
评论
1 楼 myworkfirst 2018-08-25  
这个mShowing是哪里的定义的? 有没有完整的例子

相关推荐

    Android 控制关闭Dialog

    通过反射,我们可以访问并修改这个变量的值,从而达到控制Dialog关闭与否的目的。 首先,我们需要获取到Dialog的`mShowing`字段。由于它是私有的,所以我们需要设置`field.setAccessible(true)`使其可访问: ```...

    Android Dialog 设置字体大小的具体方法

    总结起来,Android Dialog的字体大小调整可以通过多种途径实现,包括反射、自定义布局或直接操作Dialog的View。每种方法都有其优缺点,开发者应根据项目需求和团队规范选择最适合的方法。需要注意的是,尽管可以灵活...

    如何更改Dialog的标题与按钮颜色详解

    Dialog标题与按钮颜色修改是 Android 开发中的一项常见需求,对于 Dialog 的标题和按钮颜色的修改可以通过多种方式实现。本文将对 Dialog 标题和按钮颜色的修改进行详细的介绍,并提供示例代码供大家参考学习。 一...

    一个类实现Android弹出dialog,调用相册,相机截图功能

    截图功能通常通过反射调用`View`的`drawToBitmap()`方法,然后保存到本地。这里需要注意的是,截图可能涉及到安全问题,需要确保只对授权的视图进行截图: ```java private void takeScreenshot() { try { View ...

    ListDialog不带RadioButton的单选按钮对话框

    在上面的代码中,我们首先通过反射创建了一个`AlertDialog.Builder`,然后设置了自定义的布局,该布局包含一个`ListView`和相应的单选按钮。接着,我们填充了列表数据,并设置了一个点击监听器。最后,通过反射调用`...

    MFC_DLOGIN_NEW_消息反射.rar

    此外,MFC的事件驱动模型也在此发挥作用,当用户在界面上进行操作时,对应的控件会发送消息,通过消息映射和反射机制,这些消息会被转发到相应的处理函数,完成指定的数据操作。 总的来说,这个"MFC_DLOGIN_NEW_...

    java注解、反射和动态代理 简易Android Retrofit和Butter Knife 框架

    java注解、反射和动态代理 简易Android Retrofit和Butter Knife 框架 https://blog.csdn.net/soulshui/article/details/123332183?spm=1001.2014.3001.5501

    Android中阻止AlertDialog关闭实例代码

    // 通过反射获取Dialog的私有属性mShowing field = dialog.getClass().getSuperclass().getDeclaredField("mShowing"); field.setAccessible(true); // 设置该属性可访问 } catch (Exception ex) {} String ...

    Android 对话框中的进度条 ProgressDialog

    在内部,ProgressDialog使用了一个ProgressDrawable对象来绘制进度条,我们可以通过反射或者自定义DialogFragment来修改这个drawable,以实现更复杂的进度条效果。 然而,随着Android版本的更新, ProgressDialog在...

    MES源码生产管理系统winform,运用反射的技术,采用动态加载DLL的模式; 可以实现版本的自动更新

    【实例简介】 ... /// 窗体的程序集全路径名,例如"UserUI.Dialog.dynMenuSteup" /// 窗体的构造参数 /// 是否为模态窗体显示方式 public void CreateFormAndShow(string dllPathName, string AssemblyNam

    Android开发中关于获取当前Activity的一些思考

    通过反射访问`ActivityThread`类的内部结构,如`mActivities`字段,从中找到未暂停的`ActivityRecord`并返回对应的`Activity`实例。以下是一个简单的反射实现示例: ```java public static Activity getActivity() ...

    Android中设置屏幕的皮肤

    当用户选择新皮肤时,调用`setTheme()`方法并重新启动Activity,使其应用新的主题。 3. **实现全局皮肤更换**: - 要在整个应用程序中切换皮肤,可以在Application类中管理当前主题,并在每个Activity的`onCreate...

    更改TimePicker和DatePicker样式

    综上所述,通过自定义主题、设置属性、反射修改内部样式以及创建自定义Dialog,我们可以成功地更改TimePicker和DatePicker的样式,调整字体大小和颜色,同时实现类似iOS滑动选择器的效果。这不仅可以提升应用的视觉...

    语音交互智能反射系统_Voice_Interaction_Intelegent_Reflex_System

    3. 自然语言理解和生成:JavaScript库如wit.ai、apiai(现为Dialogflow)或Microsoft Bot Framework可以处理从语音识别得到的文本,理解用户的意图并生成相应的回应。这些库提供了丰富的语义解析和对话管理功能,...

    自定义来电秀Demo

    在自定义来电秀中,反射可能被用来访问或修改系统私有的来电显示服务,因为这些服务通常不对外开放,开发者需要通过反射来绕过这一限制。 1. **权限申请**:在AndroidManifest.xml中,需要声明必要的权限,如读取...

    Android代码-GenjiDialogV2

    GenjiDialog 基于kotlin的通用dialog 开始用kotlin开发之后, 发现很多东西都能简化,...解决方式:改写show方法,通过反射拿到状态值,然后在dismiss和show的时候仅使用dialog的方法 注意事项:由于这样做,会使dial

    Spinner

    - 如何通过反射或其他手段自定义Spinner的默认行为,比如改变下拉菜单的动画效果。 在实际开发中,有时候我们可能需要实现更复杂的功能,比如动态加载数据、支持搜索等。这时,博客作者可能会分享一些工具或技巧,...

    Android开发技巧总汇(4)

    获取标题栏和状态栏的高度可以通过反射的方式实现,也可以使用`getStatusBarHeight()`和`getTitleBarHeight()`等自定义方法。 #### 16. 开机自动启动 实现开机自启动功能需要注册一个BroadcastReceiver并设置启动...

    Android的移动应用颜色选取控件.rar

    不过,我们可以通过反射或者第三方库来实现类似的功能。 一个常见的第三方库是`android-color-picker`,它提供了一个易于使用的颜色选取对话框。通过集成此库,开发者可以快速添加颜色选取功能到自己的应用中。使用...

    水波效果!

    例如,一个设置水波参数的对话框,用户可以通过它调整波浪的频率、振幅、速度等参数,以达到理想的视觉效果。 综上所述,水波效果是一种广泛应用于各种领域的图形技术,通过各种方法和技术实现,为用户带来了更丰富...

Global site tag (gtag.js) - Google Analytics