首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >findviewbyid在对话框中返回null

findviewbyid在对话框中返回null
EN

Stack Overflow用户
提问于 2011-04-03 03:55:25
回答 6查看 30.7K关注 0票数 33

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

此行返回null

代码语言:javascript
复制
EditText et = (EditText)findViewById(R.id.username_edit);

下面是完整的代码。

代码语言:javascript
复制
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;
}
EN

回答 6

Stack Overflow用户

发布于 2011-04-03 04:02:00

试试这个:

代码语言:javascript
复制
EditText et = (EditText)textEntryView.findViewById(R.id.username_edit);

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

票数 40
EN

Stack Overflow用户

发布于 2016-02-18 21:09:17

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

代码语言:javascript
复制
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);
票数 16
EN

Stack Overflow用户

发布于 2011-05-03 10:35:46

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

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5525500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档