Как получить ссылку на кнопку, созданную в настраиваемом диалоге, с использованием макета xml?

У меня есть Activity, в котором пользователь может обновить конкретную информацию, нажав кнопку рядом с меткой. Эти кнопки, чем запускает диалоговое окно, где у меня есть поля для ввода пользователя и кнопка для завершения редактирования.

Моя проблема в том, что я не могу получить ссылку на кнопку declare в диалоговом конкретном макете xml. Ссылка на кнопку возвращает значение null. Следуйте фрагменту кода для иллюстрации.

Кнопка

которая запускает событие для создания диалога, объявляется как переменная экземпляра в действии следующим образом:

private Button bConfigurarCarro;

чем метод onCreate:

bConfigurarCarro = (Button)findViewById(R.id.bConfigurarCarro);
 bConfigurarCarro.setOnClickListener(configuraCarroListener);

это правильно запускает событие для создания диалогового окна:

protected OnClickListener configuraCarroListener = new OnClickListener(){
public void onClick(View v) {
showDialog(CARRO_DIALOG_ID);
Log.d(TAG, "Executando evento do botão de configuração de carro no abastecimento.");
            }
        };

чем создать диалог Переопределяет метод onCreateDialog следующим образом:

@Override
protected Dialog onCreateDialog(int id) {
  switch (id) {
    case TIME_DIALOG_ID:
        return new TimePickerDialog(this, mTimeSetListener, hora, minuto, false);
    case DATE_DIALOG_ID:
        return new DatePickerDialog(this, mDateSetListener, ano, mes, dia);
    case CARRO_DIALOG_ID:
        Log.d(TAG, "Criando dialog de cadastro de carro.");
        dialogCarro = new Dialog(this);
        dialogCarro.setContentView(R.layout.novo_carro_dialog);
        bSalvarCarro = (Button)findViewById(R.id.botaoSalvarCarro);
        bSalvarCarro.setOnClickListener(salvarCarroListener);
        dialogCarro.setTitle("Carro");
        dialogCarro.getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
        Log.d(TAG, "Dialog de cadastro de carro criado retornando...");
        return dialogCarro;
    }
        return null;
}

Конкретная строка, где триггеры NullPointer - это тот, где после попытки получить ссылку на Button выше, я чем пытаюсь установитьOnClickListener..

bSalvarCarro = (Button)findViewById(R.id.botaoSalvarCarro);
bSalvarCarro.setOnClickListener(salvarCarroListener);

bSalvarCarro имеет значение null.

Макет xml для Диалога, который я пытаюсь установить выше, используя строку кода:

dialogCarro.setContentView(R.layout.novo_carro_dialog);

Это один (novo_carro_dialog.xml):

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent" android:layout_height="fill_parent">
            <TableRow>
                <TextView android:id="@+id/marcaCarro"
                    android:layout_width="wrap_content" android:layout_height="wrap_content" 
                    android:text="@string/marcaCarro"/>
                <EditText android:id="@+id/tMarcaCarro" android:singleLine="true" android:layout_width="fill_parent"
                android:layout_height="wrap_content" android:width="130px"/>
            </TableRow>
            <TableRow>
                <TextView android:id="@+id/nomeCarro"
                    android:layout_width="wrap_content" android:layout_height="wrap_content" 
                    android:text="@string/nomeCarro"/>
                <EditText android:id="@+id/tNomeCarro" android:singleLine="true" android:layout_width="fill_parent"
                android:layout_height="wrap_content"/>
            </TableRow>
            <TableRow>
                <TextView android:id="@+id/anoCarro"
                    android:layout_width="wrap_content" android:layout_height="wrap_content" 
                    android:text="@string/anoCarro"/>
                <EditText android:id="@+id/tAnoCarro" android:singleLine="true" android:layout_width="fill_parent"
                android:numeric="integer" android:maxLength="4" android:layout_height="wrap_content" />
            </TableRow>
            <TableRow>
                <TextView android:id="@+id/modeloCarro"
                    android:layout_width="wrap_content" android:layout_height="wrap_content" 
                    android:text="@string/modeloCarro"/>
                <EditText android:id="@+id/tModeloCarro" android:singleLine="true" android:layout_width="fill_parent"
                android:layout_height="wrap_content" />
            </TableRow>
            <Button android:id="@+id/botaoSalvarCarro" android:layout_width="wrap_content"
                    android:layout_height="wrap_content" android:text="@string/bSalvarCarro" />
</TableLayout>

Как вы можете видеть, Button объявлен с id botaoSalvarCarro, но попытка получить ссылку на него возвращает null. Я немного смущен этим, как если бы я вынул строку, которая устанавливает слушателя, диалог правильно показан. Как правильно получить ссылку на эту кнопку?

Ответы

Ответ 1

dialogCarro = new Dialog(this);
dialogCarro.setContentView(R.layout.novo_carro_dialog);
bSalvarCarro = (Button)dialogCarro.findViewById(R.id.botaoSalvarCarro);

Ответ 2

Вы всегда можете получить значение Integer для значения String для представлений getTag():

.java:

public void buttonOnClick(View view) {
    int tag = Integer.valueOf(String.valueOf(view.getTag()));
    switch ( tag ) {
        case 0: {
            // First Button
            break;
        }
    }
}

.xml:

<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="First Button"
    android:onClick="buttonOnClick"
    android:tag="0"/>