findviewbyid在对话框中返回null

Ari*_*911 23 java android

我有一个自定义对话框,当我尝试获取EditText的值时,它返回null.

该行返回null

EditText et = (EditText)findViewById(R.id.username_edit);
Run Code Online (Sandbox Code Playgroud)

这是完整的代码.

protected Dialog onCreateDialog(int id) {
    switch (id) {
    case DIALOG_TEXT_ENTRY:
        LayoutInflater factory = LayoutInflater.from(this);
        final View textEntryView = factory.inflate(R.layout.alert_dialog_text_entry, null);
        return new AlertDialog.Builder(TicTacToe.this)
            //.setIconAttribute(android.R.attr.alertDialogIcon)
            .setTitle(getTitleText())
            .setView(textEntryView)
            .setPositiveButton("JOIN GAME", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    try
                    {
                        EditText et = (EditText)findViewById(R.id.username_edit);
                            playerName = et.getText().toString();
                    }
                    catch (Exception e)
                    {
                    }
                }
            })
            .create();
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)

cch*_*son 39

试试这个:

EditText et = (EditText)textEntryView.findViewById(R.id.username_edit);
Run Code Online (Sandbox Code Playgroud)

你必须告诉在哪个视图中找到id.否则它将尝试在xml布局中查找由setContentView(通常声明为onCreate)的视图中的id


Kar*_*oly 33

在我的情况下:首先我必须打电话给

dialog.show()

只有在我能够使用之后

dialog.findviewById(R.id.myID).

如果我错过了调用show(),那么我会使用findViewByID获得null.

  • 这完全与“ AlertDialog.Builder.create()”所暗示的完全相反。实际上,即使您不取消引用null,在最终调用show()时简单地调用了`findViewById`也会引发不同的异常。谢谢。 (2认同)

Leo*_*sta 9

我遇到了类似的问题.在我的例子中,我有一个自定义布局的对话框,在这个布局中有一个radioButton.为了解决这个问题,我使用了以下代码:

View dialogLayout = factory.inflate(R.layout.dialog_layout, null);
AlertDialog.Builder dialog = new AlertDialog.Builder(context);
dialog.setView(dialogLayout);

RadioButton radiobt = (RadioButton) dialogLayout.findViewById(R.id.radioBt);
Run Code Online (Sandbox Code Playgroud)