无法在对话框片段中的文本视图上设置文本
Can't set text on text view in dialog fragment
我有一个对话框片段,我使用 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()
解决了这个问题。你已经使用了 onCreateDialog()
并且它足以设置绑定对象。
布局膨胀了两次,可能 textView
在 UI 以外的布局上发生了变化。这可能是因为 onCreateView()
在 onCreateDialog()
之后被调用。因此,当您更改 onCreateDialog() 膨胀布局中的文本时,更改不会出现,因为 onCreateView()
的膨胀布局位于它之上。
在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(); }
我有一个对话框片段,我使用 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()
解决了这个问题。你已经使用了 onCreateDialog()
并且它足以设置绑定对象。
布局膨胀了两次,可能 textView
在 UI 以外的布局上发生了变化。这可能是因为 onCreateView()
在 onCreateDialog()
之后被调用。因此,当您更改 onCreateDialog() 膨胀布局中的文本时,更改不会出现,因为 onCreateView()
的膨胀布局位于它之上。
在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(); }