我有一个自定义对话框,当我尝试获取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;
}
答案 0 :(得分:37)
试试这个:
EditText et = (EditText)textEntryView.findViewById(R.id.username_edit);
你必须告诉在哪个视图中找到id。否则,它将尝试在setContentView
膨胀的xml布局中查找视图中的id(通常在onCreate
中声明)
答案 1 :(得分:30)
In my case: First I must call the
dialog.show(),
and only after it I was able to use
dialog.findviewById(R.id.myID).
If I missed to call the show(), than I got a null back with findViewByID.
答案 2 :(得分:7)
我遇到了类似的问题。在我的例子中,我有一个自定义布局的对话框,在这个布局中有一个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);
答案 3 :(得分: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
返回空值,但之后我使用dialog.findviewbyid(R.id.etBankName)
并且它有效。
答案 4 :(得分:0)
在我的情况下,我遇到了这个错误,因为我正在重新声明一个初始化变量
在主要活动中,我有:
EditText cityName;
在onCreate:
EditText cityName = (EditText)findViewById(R.id.cityName);
刚刚删除了EditText并顺利航行!
答案 5 :(得分:0)
现有答案中没有一个对我有用,因此我开始尝试使用不同的生命周期挂钩,而对我有用的是for x in list[0]:
,从语义上看也是一个不错的选择。