我在尝试在对话框中创建一个Spinner时遇到NullPointerException并且似乎无法调试它,因为代码看起来很稳固。不知道其他人有什么想法。非常感谢任何帮助。
protected Dialog onCreateDialog(int id)
{
Dialog dialog;
switch(id) {
case DIALOG_SEND_PM:
Spinner spinner = (Spinner)findViewById(R.id.pm_server);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.server_array, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new MyOnItemSelectedListener());
dialog = new Dialog(PM.this);
dialog.setContentView(R.layout.send_pm_dialog);
dialog.setTitle(R.string.send_pm);
pmMessage = (EditText) dialog.findViewById(R.id.send_pm_box);
Button sendPm = (Button) dialog.findViewById(R.id.send_pm_button);
sendPm.setOnClickListener(PM.this);
break;
default:
dialog = null;
}
我在adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)获得异常;我将上下文更改为MyClass.this,异常下移到下一行,这让我感到困惑。我想知道它是否是具有空值的适配器,但是我在调用所有内容的方式与之前相同,而不是在对话框中。
相关的XML数据:
<LinearLayout>
<TextView/>
<LinearLayout>
<TextView/>
<EditText/>
<TextView/>
<Spinner
android:id="@+id/pm_server"
android:layout_height="fill_parent"
android:layout_width="wrap_content"
android:background="@drawable/yblueborder"
android:textColor="#ABABAB"/>
</LinearLayout>
<Button/>
</LinearLayout>
编辑出其余数据,这样就不会占用太多空间。
答案 0 :(得分:11)
我已成功解决了这个问题。这非常微妙,我很确定我很幸运。这是工作代码:
protected Dialog onCreateDialog(int id)
{
Dialog dialog;
switch(id) {
case DIALOG_SEND_PM:
dialog = new Dialog(PM.this);
dialog.setContentView(R.layout.send_pm_dialog);
dialog.setTitle(R.string.send_pm);
pmMessage = (EditText) dialog.findViewById(R.id.send_pm_box);
Button sendPm = (Button) dialog.findViewById(R.id.send_pm_button);
sendPm.setOnClickListener(PM.this);
Spinner spinner = (Spinner)dialog.findViewById(R.id.pm_server);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.server_array, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new MyOnItemSelectedListener());
break;
default:
dialog = null;
}
return dialog;
}
我移动了一些代码,以便在微调器之前初始化对话框,但这不是问题。我添加了对话框。在Spinner spinner =(Spinner)dialog.findViewById(R.id.pm_server);这就是诀窍。希望这有助于其他人。