【问题标题】:Set spinner within custom dialog在自定义对话框中设置微调器
【发布时间】:2010-09-09 04:08:22
【问题描述】:

我在尝试在对话框中创建 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 并将异常移至下一行,这让我感到困惑。我想知道它是否是具有 null 值的适配器,但我在不在对话框中时以与以前相同的方式调用所有内容。

相关的 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>

编辑了其余的数据,以免占用太多空间。

【问题讨论】:

  • 您的微调器是在活动布局还是对话框布局中定义的?
  • 在对话框的布局中定义。我会发布 xml。

标签: android dialog spinner


【解决方案1】:

我已经设法解决了这个问题。这是非常微妙的,我很确定我很幸运。这是工作代码:

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);这就是诀窍。希望这对其他人有所帮助。

【讨论】:

  • 是的,很容易忘记调用 dialog.findViewById() 而不仅仅是 findViewById()。我一直在挠头,直到我仔细看了你的答案。谢谢!
  • 这是 4 年前回答的,所以我对此并不感到惊讶。此后,Google 开始使用 Fragments。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多