在自定义对话框中设置微调器

时间:2010-09-09 04:08:22

标签: android dialog spinner

我在尝试在对话框中创建一个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>

编辑出其余数据,这样就不会占用太多空间。

1 个答案:

答案 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);这就是诀窍。希望这有助于其他人。