对话框中的 setContentView() 不显示

Posted

技术标签:

【中文标题】对话框中的 setContentView() 不显示【英文标题】:setContentView() in Dialog not displaying 【发布时间】:2021-07-22 16:23:25 【问题描述】:

我在我的应用中使用自定义对话框:

override fun onCreate(savedInstanceState: Bundle?) 
        super.onCreate(savedInstanceState ?: Bundle())

        val view = LayoutInflater.from(context).inflate(R.layout.dialog_list, null)

        setContentView(R.layout.dialog_list)
        setCanceledOnTouchOutside(true)
        setCancelable(true)
        setUpRecyclerView(view)
    

我在 setContentView() 函数中传递布局名称。

但是当我点击对话框时,它什么也没有显示。

但是,如果我在 setContentView 中传递 view 对象,它会显示所有内容。

为什么我输入setContentView(R.layout.dialog_list)时没有显示

【问题讨论】:

这段代码在哪里?在DialogFragment 内?难道你不应该覆盖onCreateView 并在那里扩充布局吗? 【参考方案1】:

让我们从头开始。显示自定义对话框的最佳方法我认为它是扩展 DialogFragment 然后在onCreateView 中扩展您的布局(就像您创建片段时一样)。 所以你的 coe 应该是这样的:

            public class MyDialog extends DialogFragment 
            Button myButton;
    
            @Nullable
            @Override
            public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) 
                View mView = inflater.inflate(R.layout.your_dialog_layout, container,false);
                //here o initialize your variables
                myButton = mView.findViewById(R.id.my_button_id)
                return mView;
            
    
            @Override
            public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) 
                super.onViewCreated(view, savedInstanceState);
                //here u can set listeners or do some things like text changes etc
                myButton.setOnClickListener(v -> dismiss());
            
            @Override
            public void onStart() 
                super.onStart();
//and here u can change dialog layouts position anda else
                Dialog dialog = getDialog();
                 if(dialog != null)
    dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);
            
        
    
    

之后,您只需创建对话框实例并显示它

MyDialog dialog = new MyDialog();
dialog.show

【讨论】:

代码很好,但我的问题是我为什么要一直膨胀布局?为什么我不能传递布局资源 ID? setContentView() 也接受布局资源 id 您需要在 android 团队中找到编写原始片段的人。我们无法真正回答有关开发人员为何做出特定选择的问题。

以上是关于对话框中的 setContentView() 不显示的主要内容,如果未能解决你的问题,请参考以下文章

GridView中的进度对话框

对话框中的 Viewpager?

数组适配器中的 get count() 如何在不显式返回数组大小的情况下返回值?

Android中具有透明背景的对话框

`DataBindingUtil` 中的 `bind`、`inflate` 和 `setContentView` 有啥区别

Android - setContentView 中的 loadDrawableForCookie Resources$NotFoundException