gro*_*roo 13 android dialog reference button
我有一个活动,用户可以在标签附近的按钮中更新特定信息.这个按钮比触发一个Dialog,我有一些字段来获取用户输入和一个按钮来完成编辑.
我的问题是我无法获得对话框特定的xml布局中的按钮声明的引用.按钮引用返回null.按照一些代码片段进行说明.
触发事件以构建对话框的按钮在活动中声明为实例变量,如下所示:
private Button bConfigurarCarro;
Run Code Online (Sandbox Code Playgroud)
比onCreate方法:
bConfigurarCarro = (Button)findViewById(R.id.bConfigurarCarro);
bConfigurarCarro.setOnClickListener(configuraCarroListener);
Run Code Online (Sandbox Code Playgroud)
这会正确触发事件以创建对话框:
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.");
}
};
Run Code Online (Sandbox Code Playgroud)
而不是创建对话框覆盖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;
}
Run Code Online (Sandbox Code Playgroud)
NullPointer触发的特定行是在尝试获取上面的Button参考之后,我尝试setOnClickListener.
bSalvarCarro = (Button)findViewById(R.id.botaoSalvarCarro);
bSalvarCarro.setOnClickListener(salvarCarroListener);
Run Code Online (Sandbox Code Playgroud)
bSalvarCarro为null.
我尝试使用代码行设置的Dialog的xml布局:
dialogCarro.setContentView(R.layout.novo_carro_dialog);
Run Code Online (Sandbox Code Playgroud)
这是一个(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>
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,使用id botaoSalvarCarro声明了Button,但尝试获取对它的引用会返回null.我有点困惑,好像我拿出了设置监听器的对话框正确显示的行,所以.如何正确获得对此按钮的引用?
Cri*_*ian 15
dialogCarro = new Dialog(this);
dialogCarro.setContentView(R.layout.novo_carro_dialog);
bSalvarCarro = (Button)dialogCarro.findViewById(R.id.botaoSalvarCarro);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33635 次 |
| 最近记录: |