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;
}
Ответы
Ответ 1
Попробуйте следующее:
EditText et = (EditText)textEntryView.findViewById(R.id.username_edit);
Вы должны указать, в каком виде найти идентификатор. В противном случае он попытается найти идентификатор в представлении из макета xml, надутого setContentView
(обычно объявленного в onCreate
)
Ответ 2
В моем случае:
Сначала я должен позвонить
dialog.show(),
и только после этого я смог использовать
dialog.findviewById(R.id.myID).
Если я пропустил вызов show(), я получил null обратно с findViewByID.
Ответ 3
У меня возникла аналогичная проблема. В моем случае у меня был диалог с пользовательским макетом, и в этом макете был 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);
Ответ 4
У меня была та же проблема, которая была представлена в следующем фрагменте кода:
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
возвращал значение null, но затем я использовал dialog.findviewbyid(R.id.etBankName)
, и он работал.