Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >IllegalStateException(“您不能设置对话框的OnCancelListener或OnDismissListener")

IllegalStateException(“您不能设置对话框的OnCancelListener或OnDismissListener")
EN

Stack Overflow用户
提问于 2013-01-25 03:11:18
回答 4查看 10.6K关注 0票数 35

此DialogFragment实现将导致

IllegalStateException(“您不能设置对话框的OnCancelListener或OnDismissListener")

。为什么?解决办法?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class OkCThreadDialog1 extends DialogFragment{

DialogInterface.OnCancelListener onCancelListener;

public OkCThreadDialog1(){
}

public static OkCThreadDialog1 newInstance(String title, String message) {
    OkCThreadDialog1 frag = new OkCThreadDialog1();
    Bundle args = new Bundle();
    args.putString("title", title);
    args.putString("message", message);
    frag.setArguments(args);
    return frag;
}


public Dialog onCreateDialog(Bundle savedInstanceState){

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());


    builder .setTitle(getArguments().getString("title"))
            .setMessage(getArguments().getString("message"))
            .setOnCancelListener(onCancelListener)
            .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                }})
            .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    getDialog().cancel();
                }});

    return builder.create();
}

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    // Verify that the host activity implements the callback interface
    try {
        onCancelListener = (DialogInterface.OnCancelListener) activity;
    } catch (ClassCastException e) {
        // The activity doesn't implement the interface, throw exception
        throw new ClassCastException(activity.toString()
                + " must implement OkCancelDialogListener");
    }
}
}

我的活动实现DialogInterface.OnCancelListener如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class MainActivity extends Activity implements OkCancelDialogListener{

static final String TAG ="MainActivity";

@Override
public void onCancel(DialogInterface dialog) {


}
}

Exeception是从builder.create();抛出的。怎么了?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-02-14 05:46:57

来自Android文档

公共对话框onCreateDialog (Bundle savedInstanceState) 覆盖以生成您自己的自定义对话框容器。这通常用于显示AlertDialog而不是一般的对话框;在这样做时,不需要实现onCreateView(LayoutInflater、ViewGroup、Bundle),因为AlertDialog处理自己的内容。 此方法将在onCreate(Bundle)之后和onCreateView(LayoutInflater,ViewGroup,Bundle)之前调用。默认实现只是实例化并返回Dialog类。 备注: DialogFragment拥有Dialog.setOnCancelListener和Dialog.setOnDismissListener回调。你不能亲自设置它们。 要了解这些事件,请重写onCancel(DialogInterface)和onDismiss(DialogInterface).

因此,基本上,您必须重写onDismiss或OnCancel,而不是“.setOnCancelListener(OnCancelListener)”。

票数 87
EN

Stack Overflow用户

发布于 2015-07-20 06:07:36

你可以试试这个:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setTitle("Title");
    builder.setMessage("Message");
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            // do something positive
        }
    });
    return builder.create();
}

@Override
public void onCancel(DialogInterface dialog) {
    // do something
}

希望能帮上忙..。

票数 6
EN

Stack Overflow用户

发布于 2013-01-25 03:16:02

您为对话框设置OnCancelListener,而不是为其构建器设置。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public Dialog onCreateDialog(Bundle savedInstanceState){

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder .setTitle(getArguments().getString("title"))
        .setMessage(getArguments().getString("message"))
        .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
            }})
        .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                getDialog().cancel();
            }});

    Dialog dialog = builder.create();
    dialog.setOnCancelListener(onCancelListener);
    return dialog;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14520597

复制
相关文章
Android设计模式学习之Builder模式
建造者模式(Builder Pattern),是创造性模式之一,Builder 模式的目的则是为了将对象的构建与展示分离。Builder 模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细地控制对象的构造流程。
老马的编程之旅
2022/06/22
7720
Android设计模式学习之Builder模式
android dialog用法
转自:http://www.cnblogs.com/weeds/archive/2012/01/17/2324238.html
forrestlin
2022/04/02
1.4K0
Android 自定义View 之 Dialog弹窗
  在日常开发中用到弹窗是比较多的,常用于提示作用,比如错误操作提示,余额不足提示,退出登录提示等,还有用于数据展示的弹窗,上拉弹窗等等,主要为了简化在日常开发中的使用。
晨曦_LLW
2023/07/10
1.1K0
Android 自定义View 之 Dialog弹窗
Android 天气APP(二十六)增加自动更新(检查版本、通知栏下载、自动安装)
  对于任何APP来说基本上都会有自动更新这个功能,那么为什么我的这个APP之前没有写呢?因为之前APP比较小,更像是一个Demo,看的人没有几个,更像是我在自娱自乐,不过随着我不断的更新APP的功能和写博客,使用的用户增加了,虽然不多,但我还是蛮开心的,增加APP自动更新这个功能的好处就是,无论以后我更新了什么功能,只要你打开APP就会提醒你新增的功能,你可以安装使用,也可以不安装都随你。说了这么多废话了,还是来实践吧。
晨曦_LLW
2020/09/25
1.4K0
ProgressDialog总结
ProgressDialog 继承自AlertDialog,AlertDialog继承自Dialog,实现DialogInterface接口。
全栈程序员站长
2022/09/14
3550
Android之ProgressDialog的使用
ProgressDialog 继承自AlertDialog,AlertDialog继承自Dialog,实现DialogInterface接口。
全栈程序员站长
2022/09/06
4820
DialogFragment 使用
通过继承DialogFragment并且实现它的onCreateDialog(Bundle savedInstanceState)方法来创建一个DialogFragment,这个方法返回的是一个Dialog,意味着我们需要创建一个AlertDialog,并返回。
Yif
2019/12/26
1.6K0
设置图例不能点击
option8: { color: ["#00CCFF", "#FE713A"], legend: { data: ["最高分", "最低分"], icon: "circle", selectedMode: false /// 设置图例不能点击 }, grid: { left: "10%", right: "2%",
用户4344670
2020/05/26
1.4K0
servlet中的IllegalStateException
本文链接:https://blog.csdn.net/u014427391/article/details/97397116
SmileNicky
2019/08/29
5230
单独设置UIView的坐标x或y或width或height
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/53393737
用户1451823
2018/09/13
1.4K0
Android MVVM框架搭建(七)Permission、AlertDialog、拍照和相册选取
  在上一篇博客中完成了新闻详情数据的查看以及用户的注册登录,这篇文章中将对用户的信息进行增加和修改。会使用到文件读写、相机权限、自定义Dialog、相册选取和相机拍照。
晨曦_LLW
2021/12/19
1.6K0
Android MVVM框架搭建(七)Permission、AlertDialog、拍照和相册选取
关于QProcess不能带空格的目录或文件
  从接口(2.1与2.2)的相似度先提出疑问,为什么一个是program一个是command?
Qt君
2019/07/16
3.5K0
tomcat不能运行或共存多个项目
我在Tomcat下部署了两个项目,但是一个可以运行,另一个不可以,第一感觉是内存问题,给tomcat多分配了内存.但是没有作用. 原因是少了webAppRootKey这个参数,需要在各自的web.xml下添加 <context-param>        <param-name>webAppRootKey</param-name>        <param-value>socialmedia</param-value>   </context-param> 但是我添加后,只能运行一个,其他两个运行不了。原
冷冷
2018/02/08
9920
Android中导致内存泄漏的竟然是它----Dialog
一. 内存泄漏的 Bug 猛增 最近在 App 进行 mokey 测试的时候检测到一些内存泄漏问题。在前天的测试中,楼主一瞬间收到了4个这样的 Bug 单,瞬间心理无比纠结,真有千万只羊驼向我奔来。 登录页面出现内存泄漏??!!楼主的代码是如此的完美而无懈可击,这么可能出现这么多泄漏的问题? 插播什么是 Activity 泄漏:Android 中 Activity 代表一个页面,拥有一段生命周期,生命周期结束后,Activity 对象应当在之后某个合适的时机被 VM 回收内存。出现了泄漏就意味着 Ac
腾讯Bugly
2018/03/23
3.4K0
Android中导致内存泄漏的竟然是它----Dialog
设置 git/npm/bower/pip/gem镜像或代理
有时候因为墙或者速度的原因使用git/npm/bower/pip/gem等工具的时候需要设置镜像或者代理,记录一下,不用到处找。 git 设置: $ git config --global http.proxy http://proxy.mysite.com 取消: $ git config --global --unset http.proxy npm 设置代理: $ npm config set proxy=http://proxy.mysite.com 取消代理: $ npm confi
Bob.Chen
2018/05/02
3.1K0
项目需求讨论-Android 自定义Dialog实现步骤及封装
在项目中,我们会遇到各种各样的界面需求,比如对话框和选择框,都是会配合具体项目的UI界面来做,而不是说用自带的弹出框。比如下面在登录界面的二个对话框效果。都是我在做具体项目中所要求实现的:
用户2802329
2018/08/07
1.5K0
项目需求讨论-Android 自定义Dialog实现步骤及封装
servlet系列之IllegalStateException
IllegalStateException在java web开发中比较常见,IllegalStateException的根本原因是java servlet在提交响应后,还尝试写内容。
SmileNicky
2022/05/07
1760
解决windows7不能设置壁纸的问题
我的系统是windows server 2008 r2(启用windows 7桌面体验)最近因为系统慢的缘故,强关了一下机,开机进入系统,发现成黑屏了,改变windwos 7主题、设置图片为壁纸都不管用。我的系统可是正版的啊。
williamwong
2018/07/24
7460
解决windows7不能设置壁纸的问题
如何恢复MacBook或iMac的出厂设置
不少mac小伙伴,都或多或少有过想把macbook或imac恢复出厂设置的经历。本文简单介绍了恢复出厂设置的办法。
全栈程序员站长
2022/07/04
5.8K0
如何恢复MacBook或iMac的出厂设置
点击加载更多

相似问题

设置OnCancelListener时的DialogFragment空指针

10

如何在MainActivity中设置DialogFragment的onDismissListener?

140

显示对话框- IllegalStateException:您需要使用Theme.AppCompat主题

11

DialogFragment中的OnDismissListener

31

DialogFragment OnDismissListener不工作

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文