android - 如何使用 xml 布局获取对在自定义对话框中创建的按钮的引用?

标签 android button reference dialog

我有一个 Activity ,用户可以在其中单击标签附近的按钮来更新特定信息。这个按钮会触发一个对话框,其中我有一些字段可以获取用户输入,还有一个按钮可以完成编辑。

我的问题是我无法获得对对话框特定 xml 布局中声明的按钮的引用。按钮引用返回 null。按照一些代码 fragment 进行说明。

触发事件以构建对话框的按钮在 Activity 中声明为实例变量,如下所示:

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 引用之后,我尝试 setOnClickListener..

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

bSalvarCarro 为空。

我尝试使用代码行在上面设置的对话框的 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。我对此有点困惑,就好像我取出了设置监听器的那一行,对话框被正确显示了,所以。如何正确获取对此按钮的引用?

最佳答案

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

关于android - 如何使用 xml 布局获取对在自定义对话框中创建的按钮的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4011152/

相关文章:

android - 如何从 firebase db android 中的 2 个表中检索数据?

android - 更改区域设置但保持从左到右和其他电话方向

javascript - C# Web 浏览器 - 如何单击此按钮 (Javascript)

java - 将静态方法传递给按钮工厂 (Java)

android - 如何在 Android 中获取电话联系人

javascript - 如何为该功能添加开始按钮?

Javascript:多次调用对象属性

c++ - vector::引用

java - Java HashSet<String> 的 contains() 方法会测试字符串或对象标识的相等性吗?

php - 插入多个 mysql 行 php Android