0

我有一个对话框片段,我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 上不可见。

有人对此有解决方案吗?

4

2 回答 2

2

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

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

于 2021-06-21T05:09:26.797 回答
1

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

公共对话 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(); }
于 2021-06-21T05:44:07.923 回答