Android — Получение дескриптора компонентов в пользовательском диалоговом окне

#android #android-layout #android-emulator #android-widget

#Android #android-layout #android-эмулятор #android-виджет

Вопрос:

Я пытаюсь создать пользовательское диалоговое окно, нажав на опцию в меню. Я продолжаю запускать новое действие с намерением, указывающим на customTextMessageDialog.

Я могу получить дескриптор для любого из виджетов, определенных в моем customdialog.xml файл с использованием кода типа «PhoneNumber = (EditText)dialog.findViewById(R.id.customDialogPhoneNumber1);»

Однако я ничего не могу сделать с этим дескриптором. В тот момент, когда я пытаюсь setText () для дескриптора EditText или если я устанавливаю OnClickListener для одной из кнопок, определенных в моем xml, мое приложение вылетает. Есть идеи относительно того, почему это происходит и как я могу это исправить?

Кроме того, почему мне нужно сначала создать экземпляр Dialog, прежде чем вызывать findViewById в этом экземпляре?

 public class customTextMessageDialog extends Activity
{
    EditText phoneNumber;
    EditText message;
    Button cancelButton;
    Button sendButton;

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.customdialog);
    Dialog dialog = new Dialog(this);
    phoneNumber = (EditText)dialog.findViewById(R.id.customDialogPhoneNumber1);
    //phoneNumber.setTextColor(R.color.gray);
    //phoneNumber.setText("ex: 4127214544");
    message = (EditText)dialog.findViewById(R.id.customDialogMessage1);
    cancelButton = (Button)dialog.findViewById(R.id.customDialogCancelButton1);
    cancelButton.setOnClickListener(new OnClickListener()
    {
        @Override
        public void onClick(View v) {
            finish();

        }
    });
    sendButton = (Button)dialog.findViewById(R.id.customDialogPhoneNumber1);
}
}
  

Ответ №1:

В вашем коде вы устанавливаете для Activity contentView значение customDialog . Вам нужно настроить макет вашего диалогового окна в соответствии с этим макетом. Читать это.

Сделайте это:

 dialog.setContentView(R.layout.customdialog);
  

Комментарии:

1. Привет, спасибо, что указали на это. Я внес изменения. Однако мой код по-прежнему выходит из строя, когда я пытаюсь изменить дескриптор для различных имеющихся у меня элементов.