Подтвердить что ты не робот

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

Ответ 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), и он работал.