Установить счетчик в пользовательском диалоге - PullRequest
1 голос
/ 09 сентября 2010

Я получаю исключение NullPointerException при попытке создать Spinner в диалоге и не могу его отладить, потому что код выглядит надежным. Интересно, есть ли у кого-нибудь еще идеи? Любая помощь с благодарностью.

    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 Ответ

11 голосов
/ 09 сентября 2010

Мне удалось решить проблему.Это было очень тонко, и я почти уверен, что мне повезло.Вот рабочий код:

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);и это помогло.Надеюсь, что это помогает другим.

...