首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >获取DialogFragment视图

获取DialogFragment视图
EN

Stack Overflow用户
提问于 2015-11-23 00:34:52
回答 2查看 1.6K关注 0票数 1

我已经创建了具有自定义布局的Dialog片段,并希望为某些文本框设置文本。但是,当试图在我的适配器图像中获得视图时,单击我就得到了空指针异常。

我想知道有什么最好的方法来实施它吗?

提前谢谢。

下面是我的代码:

代码语言:javascript
运行
AI代码解释
复制
public class AlertDialogFragment extends DialogFragment
{
    private View dialogView;
    private static IDialogButtonsClicks buttonsClicks;
    private AlertDialog.Builder alertDialog;

    public static AlertDialogFragment newInstance(int title, int icon, int positive, int negative, int view, int message, IDialogButtonsClicks clicks)
    {
        AlertDialogFragment dialogFragment = new AlertDialogFragment();

        Bundle args = new Bundle();
        args.putInt("title", title);
        args.putInt("icon", icon);
        args.putInt("pos", positive);
        args.putInt("neg", negative);
        args.putInt("view", view);
        args.putInt("message", message);

        buttonsClicks = clicks;

        dialogFragment.setArguments(args);

        return dialogFragment;
    }

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState)
    {
        alertDialog = new AlertDialog.Builder(getActivity());

        int dView = getArguments().getInt("view");
        int mess = getArguments().getInt("message");

        if (dView != -1)
        {
            LayoutInflater layoutInflater = LayoutInflater.from(getActivity());
            dialogView = layoutInflater.inflate(dView, null);

            alertDialog.setView(dialogView);
        }

        if (mess != -1)
        {
            alertDialog.setMessage(mess);
        }

        alertDialog.setTitle(getArguments().getInt("title"));
        alertDialog.setIcon(getArguments().getInt("icon"));

        alertDialog.setPositiveButton(getArguments().getInt("pos"), new DialogInterface.OnClickListener()
        {
            @Override
            public void onClick(DialogInterface dialog, int which)
            {
                buttonsClicks.OnPositiveButtonClick(dialogView);
            }
        });

        alertDialog.setNegativeButton(getArguments().getInt("neg"), new DialogInterface.OnClickListener()
        {
            @Override
            public void onClick(DialogInterface dialog, int which)
            {
                buttonsClicks.OnNegativeButtonClick();
            }
        });

        return alertDialog.create();
    }

    public View getDialogView()
    {
        return dialogView;
    }

    @Nullable
    @Override
    public View getView()
    {
        return super.getView();
    }
}



holder.imgCatEdit.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                AlertDialogFragment editCatDialog = AlertDialogFragment.newInstance(R.string.add_category_title, R.drawable.ic_edit, R.string.edit_cat_button_save, R.string.edit_cat_button_cancel, R.layout.edit_category, -1, new IDialogButtonsClicks()
                {
                    @Override
                    public void OnPositiveButtonClick(View view)
                    {

                    }

                    @Override
                    public void OnNegativeButtonClick()
                    {

                    }
                });

                editCatDialog.show(((MyBusinessMainActivity)baseContext).getSupportFragmentManager(), "EditCatDialog");

                View dialogView = editCatDialog.getView();//It seems here I'm getting null

                EditText ed_edit_cat_name = (EditText)dialogView.findViewById(R.id.ed_edit_cat_name);
                EditText ed_edit_cat_descr = (EditText)dialogView.findViewById(R.id.ed_edit_cat_descr);

                ed_edit_cat_name.setText(cat_name);
                ed_edit_cat_descr.setText(cat_descr);
            }
        });





11-23 12:40:49.708 19702-19702/am.nkr.mybusiness E/AndroidRuntime: FATAL EXCEPTION: main
                                                                   Process: am.nkr.mybusiness, PID: 19702
                                                                   java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
                                                                       at am.nkr.mybusiness.CategoriesAdapter$2.onClick(CategoriesAdapter.java:165)
                                                                       at android.view.View.performClick(View.java:5198)
                                                                       at android.view.View$PerformClick.run(View.java:21147)
                                                                       at android.os.Handler.handleCallback(Handler.java:739)
                                                                       at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                       at android.os.Looper.loop(Looper.java:148)
                                                                       at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                       at java.lang.reflect.Method.invoke(Native Method)
                                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-23 00:57:04

这是因为当您执行editCatDialog.getView();时,视图尚未初始化(未调用onCreateDialog())。

最好的方法是在onViewCreated方法的对话框中添加侦听器。然后将这些事件传递给您的主片段(例如通过buttonClicks变量)。

如果您想要以一种快速、笨拙的方式编写getSupportFragmentManager().executePendingTransaction(),则可以在show方法之后编写

票数 2
EN

Stack Overflow用户

发布于 2015-11-23 01:03:02

是的,您得到了这个错误,因为当您调用ed_edit_cat_name.setText(cat_name);时,您的DialogFragment回调onCreateView还没有完成!为了克服这个问题,我认为您可以声明一些变量,以便将cat_namecat_des保存在DialogFragment中,如下所示:

代码语言:javascript
运行
AI代码解释
复制
public class AlertDialogFragment extends DialogFragment
{
     private String catName;// getter - setter 
     private String catDes;//getter-setter
     // TODO: find your view and set cat name, description in onCreateView callback.
}

然后,您可以在创建DialogFragment的新实例时设置猫名,cat。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33866579

复制
相关文章
DialogFragment 使用
通过继承DialogFragment并且实现它的onCreateDialog(Bundle savedInstanceState)方法来创建一个DialogFragment,这个方法返回的是一个Dialog,意味着我们需要创建一个AlertDialog,并返回。
Yif
2019/12/26
1.7K0
Android学习之DialogFragment
DialogFrament是Android sdk中的对话框基类,开发人员可以针对此类进行扩展。他可以扩展出Android中的多种对话框,比如alertdialog,listdialog,radiod
水击三千
2018/02/27
9060
DialogFragment踩坑记
DialogFragment推出来已经很久了,网上相关的文档一大堆,但是稍微不注意,还是会踩坑,本篇基于自身经历总结
韦东锏
2021/09/29
2.2K0
DialogFragment踩坑记
vue获取当前视图组件对象
想在console中调试查看vue对象的数据情况,奈何没有入口,全局的vue对象可以挂出来,但是没法定位到具体的视图对象。
shirishiyue
2019/06/29
3.5K0
iOS获取当前显示UIViewController视图
- (UIViewController *)getCurrentVC { UIViewController *result = nil; UIWindow * window = [[UIApplication sharedApplication] keyWindow]; if (window.windowLevel != UIWindowLevelNormal) { NSArray *windows = [[UIApplication sharedApplicatio
Lee坚武
2020/12/01
9740
express4.2获取参数和视图
1.获取参数 router.get('/', function(req, res) { //console.log(req.query.a); //get a=2 //console.log(req.query.b.a); //get b[a]=3 console.log(req.param('name')); res.render('index', { title: 'Express' }); }); router.post('/', function(req, res) { console.
苦咖啡
2018/05/08
1.4K0
iOS 中获取某个视图的截图
最近在做SDK的截图,想触发类似系统的截屏功能,找了一圈,总结一下靠谱的几种方式。 我写了个UIView 的category,将这几种方式封装和简化了一下。
Haley_Wong
2018/08/22
3K0
django 通用视图(generic view)获取 request
from django.views import generic from blog.models import * from ipware.ip import get_ip class IndexView(generic.ListView): template_name = 'lw-index-noslider.html' # 加载该html文件 context_object_name = "articles" # 是数据库搜索出来的结果存放的变量名字,用于模板循环显示
卓越笔记
2023/02/17
3280
Android 撸起袖子,自己封装 DialogFragment
DialogFragment 在 Android 3.0 时被引入,是一种特殊的 Fragment,用于在 Activity 的内容之上显示一个静态的对话框。例如:警告框、输入框、确认框等。
developerHaoz
2018/08/20
1.4K0
Android入门教程 | DialogFragment 的使用
DialogFragment是在3.0时引入的,是一种特殊的 Fragment,用于在 Activity 上展示一个模态的对话框。
Android_anzi
2021/10/26
1.2K0
DialogFragment IllegalStateException: Can not perform this action after onSaveIn
DialogFragment 偶现IllegalStateException: Can not perform this action after onSaveInstanceState。一般的解决方法,使用commitAllowingStateLoss 替代 commit,但DialogFragment的show方法默认使用的commit,无法修改
FangMessi
2021/09/28
9540
DialogFragment IllegalStateException: Can not perform this action after onSaveIn
Flask 学习-10.url_for()函数获取视图url
前言 在浏览器输入url地址可以访问到视图函数,如果需要反向获取对应视图的url地址可以用url_for()函数 url_for() 函数 url_for() 函数用于构建指定函数的 URL。它把函数名称作为第一个参数。它可以接受任意个关键字参数,每个关键字参数对应 URL 中的变量。未知变量 将添加到 URL 中作为查询参数。 为什么不在把 URL 写死在模板中,而要使用反转函数 url_for() 动态构建? 反转通常比硬编码 URL 的描述性更好。 你可以只在一个地方改变 URL ,而不用到处乱找。
上海-悠悠
2022/08/29
8530
Android 必知必会 - DialogFragment 使用总结
Android 官方推荐使用 DialogFragment 来代替 Dialog ,可以让它具有更高的可复用性(降低耦合)和更好的便利性(很好的处理屏幕翻转的情况)。
他叫自己MR.张
2019/07/01
4.3K0
使用优化器性能视图获取SQL语句执行环境
    Oracle SQL语句的运行环境分为多个不同的层次,主要包括实例级别,会话级别,语句级别,其优先级依次递增。即语句级别的执行环境具 有最高的优先权,会话级别次之,实例级别最低。反过来,实例级别的环境设置影响全局,而会话级别的则影响当前会话,语句级别的设置当然 也就只影响当前语句。由此可知,运行环境中每一个环节的参数都对最终的数据库性能或所执行的SQL语句有直接的影响。因此在对数据库优化 或调试SQL时,获得当前SQL语句运行环境显得尤为重要。为此,Oracle提供了三个重要的视图来获取不同级别的参数信息。 一、优化器性能视图名字
Leshami
2018/08/14
5830
MVC 通过Jquery获取视图中所有控件的值
在使用MVC开发Web时,有需求要将页面所有控件及其值传递到客户端与预定义的界面字段配置进行匹配。
aehyok
2018/09/11
2K0
【JetPack】ViewBinding 视图绑定组件 ( 启用模块 | 视图绑定定制 | 绑定类名称生成规则 | 绑定类字段生成规则 | 绑定类获取根视图 | 绑定类获取布局组件 )
Activity 获取布局组件方式 : 在之前的 Activity 代码中 , 使用 findViewById ( ) 方法 , 或者 Butter Knife 的 @BindView 注解方式获取 Layout 布局中的组件对象 ;
韩曙亮
2023/03/27
1.2K0
【JetPack】ViewBinding 视图绑定组件 ( 启用模块 | 视图绑定定制 | 绑定类名称生成规则 | 绑定类字段生成规则 | 绑定类获取根视图 | 绑定类获取布局组件 )
Android 必知必会 - DialogFragment 实现类似 PopupWindow 效果
版权声明:本文为[他叫自己Mr.张]的原创文章,转载请注明出处,否则禁止转载。 https://micro.blog.csdn.net/article/details/72834008
他叫自己MR.张
2019/07/01
1.8K0
Android 必知必会 - DialogFragment 实现类似 PopupWindow 效果
你还在使用Dialog?赶紧把DialogFragment用起来
DialogFragment是在Android 3.0的时候被引入的, 目的是dialog也变成了碎片。DialogFragment是Fragment的子类,用于创建于用户交互的对话框。在DialogFragment未哇哇坠地之前,我们一般用AlertDialog和Dialog来创建对话框。现在,谷歌官方不建议直接使用Dialog创建对话框。
猴哥yuri
2018/08/16
1.6K0
点击加载更多

相似问题

从DialogFragment获取视图

42

从dialogFragment视图中获取“ListView”setOnItemClickListener

13

DialogFragment中的动画视图

21

Android DialogFragment视图不更新

13

具有重叠视图的DialogFragment

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文