findviewbyid在对话框中返回null

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

这一行返回null

EditText et = (EditText)findViewById(R.id.username_edit); 

这是完整的代码。

 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; } 

Solutions Collecting From Web of "findviewbyid在对话框中返回null"

尝试这个:

 EditText et = (EditText)textEntryView.findViewById(R.id.username_edit); 

你必须告诉在哪个视图中findid。 否则,它将尝试在xml布局中查找id在setContentView (通常在onCreate声明)

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

dialog.show()

只有在我能够使用之后

dialog.findviewById(R.id.myID)。

如果我错过了调用show(),比用findViewByID得到一个null。

我面临类似的问题。 在我的情况下,我有一个自定义布局的对话框,在这个布局有一个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); 

我遇到了同样的问题,它出现在下面的代码片段中:

 final Dialog dialog = new Dialog(this); dialog.setContentView(R.layout.addbank_dialog); dialog.show(); Button btnSaveBank = (Button)dialog.findViewById(R.id.btnSaveBank); final EditText etBankName = (EditText)dialog.findViewById(R.id.etBankName); btnSaveBank.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { try{ String bank = etBankName.getText().toString(); SharedCommonData.dbOps.saveBankInDB(bank); } catch(Exception e){ e.printStackTrace(); } Toast.makeText(SharedCommonData.context, "Bank Saved", Toast.LENGTH_SHORT); refreshBanks(); dialog.dismiss(); } }); 

etBankName是返回空值,但后来我用dialog.findviewbyid(R.id.etBankName) ,它的工作。