【问题标题】:Changing contents of an EditText widget in AlertDialog without onPrepareDialog()在没有 onPrepareDialog() 的情况下更改 AlertDialog 中的 EditText 小部件的内容
【发布时间】:2013-01-20 06:59:27
【问题描述】:

我正在使用带有自定义视图的 AlertDialog,其中包含 EditText 小部件。我想在显示 AlertDialog 之前更改 EditText 小部件的内容。我知道这通常是通过覆盖 onPrepareDialog() 并在那里设置文本来完成的。但是,据我所知,这在我的特定情况下不起作用,因为我使用 AlertDialog.show() 而不是 Activity.showDialog()。

那么我应该如何处理使用 AlertDialog.show() 显示的对话框?一种解决方案是在对话框被带到前面之后设置文本,即:

AlertDialog alertDialog = builder.create(); 
alertDialog.show();
EditText editText = (EditText) alertDialog.findViewById(R.id.text);
editText.setText("Foo bar");

但是,我认为这不是一个好的解决方案,因为首先显示对话框,然后设置文本。我想在实际显示对话框之前设置文本。

有什么方法可以实现吗?我不能在 alertDialog.show() 之前执行此操作,因为 findViewById() 在 alertDialog.show() 之前调用时返回 null。

感谢您的帮助!

【问题讨论】:

    标签: android dialog android-alertdialog


    【解决方案1】:
    AlertDialog alertDialog = builder.create(); 
    alertDialog.show();
    

    由于您可以访问 AlertDialog.Builder 对象,因此只需在调用 builder.create() 之前更改布局。


    加法

    我的 XML 文件中有一个 EditText 小部件,我使用 builder.setView(inflater.inflate(R.layout.mydialog, null)) 对其进行膨胀。如何在不调用 findViewById() 的情况下更改此 EditText 小部件的文本?

    将该行分解为一系列命令。具体来说:扩充 XML,更改布局,并将其传递给 setView()

    View view = inflater.inflate(R.layout.mydialog, null);
    EditText editText = (EditText) view.findViewById(R.id.text);
    editText.setText("Foo bar");
    builder.setView(view);
    

    【讨论】:

    • 嗯,这可能是一个愚蠢的问题,但是:我该如何使用从 XML 资源膨胀的自定义布局来做到这一点?我的 XML 文件中有一个 EditText 小部件,我使用 builder.setView(inflater.inflate(R.layout.mydialog, null)) 对其进行膨胀。如何在不调用 findViewById() 的情况下更改此 EditText 小部件的文本?
    • 非常感谢您的解释!
    猜你喜欢
    • 2022-01-25
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    • 2014-09-17
    • 2012-03-09
    • 2021-01-14
    相关资源
    最近更新 更多