AlertDialog或者Dialog显示的内容异常

在Android中显示一个Dialog,为了性能更优化,会遵循这样一个机制。现在缓存中查找是否有包含该DialogID的对话框,如果有的话直接调用;反之就重新创建一个。

该方法对于性能优化比较有用,但是对于我们每次显示对话框都要求显示不同内容的需求来说就有点麻烦了。

方法就是在创建这个Dialog之前先将他从缓存中移除。如下:

    	switch(id)
    	{
    	case DIALOG_OPERATION_MENU:
			return new AlertDialog.Builder(this).setTitle("操作")
    				.setIcon(R.drawable.ic_launcher)
    				.setItems(R.array.operation_menu, ocl).create();
    		//重命名文件
    	case DIALOG_RENAME: 
    		return new AlertDialog.Builder(this).setTitle("重命名")
    				.setView(mRename).setPositiveButton("确定", ocl)
    				.setNegativeButton("取消", ocl).create();
    		//分享文件
    	case DIALOG_SHARE:
    		shareAPK();
    		break;
    		//显示详情
    	case DIALOG_DETAIL:
    		return showFileDetail();
    	}
    	return null;
    }

这里面都是显示一个Dialog,在显示每个Dialog方法前都会调用onPrepareDialog方法。我们就重写这个方法,从缓存中移除该dialog,如下:

	protected void onPrepareDialog(int id, Dialog dialog) {
	// TODO Auto-generated method stub
    	switch(id)
    	{
    	case DIALOG_OPERATION_MENU:
    	case DIALOG_RENAME:
    	case DIALOG_SHARE:
    	case DIALOG_DETAIL:
    		removeDialog(id);
    		break;
    	}
    	super.onPrepareDialog(id, dialog);
	}

这样每次显示新的Dialog都会调用onPrepareDialog,都会从缓存中删除该Dialog。这样就会重新运行一遍创建Dialog的流程,这样我们写在创建Dialog中的代码就会起作用。
在使用Android开发时,`Dialog.setPositiveButton` 方法用于设置对话框中的确认按钮,并为其绑定一个点击事件监听器。如果在点击确认按钮后需要异常退出应用程序,可以通过以下几种方式实现: 1. **抛出异常**:在按钮的点击事件中抛出一个异常。 2. **调用 `System.exit()`**:强制终止应用程序。 3. **调用 `finishAffinity()`**:关闭所有活动并退出应用程序。 以下是一个示例代码,展示了如何在 `setPositiveButton` 中实现异常退出: ```java AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("提示"); builder.setMessage("确认要退出吗?"); builder.setPositiveButton("确认", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 方法一:抛出异常 throw new RuntimeException("用户主动退出应用"); // 方法二:强制终止应用程序 // System.exit(0); // 方法三:关闭所有活动并退出应用程序 // finishAffinity(); // System.exit(0); } }); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); AlertDialog dialog = builder.create(); dialog.show(); ``` 在上述代码中,`setPositiveButton` 方法中包含了三种同的异常退出方式: 1. **抛出异常**:通过 `throw new RuntimeException("用户主动退出应用")` 抛出一个运行时异常。 2. **调用 `System.exit()`**:通过 `System.exit(0)` 强制终止应用程序。 3. **调用 `finishAffinity()`**:通过 `finishAffinity()` 关闭所有活动并退出应用程序,然后调用 `System.exit(0)` 确保应用程序退出。 请注意,抛出异常和强制终止应用程序的方式可能会导致应用程序的稳定,建议在实际开发中谨慎使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值