无法在对话框片段中的文本视图上设置文本

Posted

技术标签:

【中文标题】无法在对话框片段中的文本视图上设置文本【英文标题】:Can't set text on text view in dialog fragment 【发布时间】:2021-09-04 18:59:04 【问题描述】:

我有一个对话框片段,我使用databinding 绑定视图。

创建对话框后,我无法在文本视图上设置文本。

这是我的代码:

class MyDialogFragment : DialogFragment() 

    private lateinit var layout : FragmentMyDialogBinding

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View 
        layout = FragmentMyDialogBinding.inflate(inflater,container,false)
        return layout.root
    

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog 


        layout = FragmentMyDialogBinding.inflate(LayoutInflater.from(requireContext()))

        layout.textView.text = "Initial text"

        layout.button.setOnClickListener
        
        layout.textView.text = "Text changed"
        
        Log.wtf("Text","$layout.textView.text")

        // Log shows the changed text but it is not visible on the ui.
        
        
        

        val builder = MaterialAlertDialogBuilder(requireContext(), R.style.RoundShapeTheme)


        builder.setView(layout.root)

        return builder.create()
    


日志显示更改的文本,但在 UI 上不可见。

有人对此有解决方案吗?

【问题讨论】:

也许尝试避免onCreateView 覆盖?似乎没有必要。 【参考方案1】:

我刚刚测试了您的代码,并通过删除onCreateView() 解决了它。您已经使用了onCreateDialog(),它足以设置绑定对象。

布局膨胀了两次,textView 可能会在 UI 上没有的布局上发生更改。这可能是因为onCreateView()onCreateDialog() 之后被调用。因此,当您更改 onCreateDialog() 膨胀布局中的文本时,不会出现更改,因为 onCreateView() 的膨胀布局位于其顶部。

【讨论】:

我认为覆盖 onCreateView() 是必需的。 在普通片段中是必需的。在对话框片段中没有【参考方案2】:

onCreateDialog() 方法中通过以下代码设置自定义视图:

public Dialog onCreateDialog(@Nullable Bundle savedInstanceState)

binding = DialogLayoutBinding
          .inflate(LayoutInflater.from(getContext())); AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setView(binding.getRoot());

binding.dialogTextView.setText("I am Dialog's TextView");

return builder.create(); 

【讨论】:

以上是关于无法在对话框片段中的文本视图上设置文本的主要内容,如果未能解决你的问题,请参考以下文章

工具栏视图引用从对话框片段返回后变为空

MFC小程序003------MFC使用WebBrowser组件,在对话框中创建滚动视图,动态创建一个静态文本控件并设置鼠标单击的消息响应

软输入键盘隐藏编辑文本

arcgis怎么设置文本框样式

可以从对话框textview获取文本,但无法从对话框edittext获取文本

使用颜色选择器更改片段中edittext的背景颜色