Обработка кнопок в пользовательских диалогах - PullRequest
2 голосов
/ 06 ноября 2010

У меня небольшая проблема с настраиваемым диалоговым окном Android.

Я создаю настраиваемое диалоговое окно в функции onCreateDialog (int):

dialog = new Dialog(this);
dialog.setContentView(R.layout.custom_dialog);
dialog.setTitle("Custom Dialog");

У меня есть функция onClick (View)в том же классе:

   public void onClick(View v) {
        switch(v.getId()) {
        case R.id.dialog_button:
            Log.i("pma57","dialog button pressed");
            break;
        case R.id.main_button:
            showDialog(DIALOG_CUSTOM);
            break;
        }       
    }

Это определение XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:paddingLeft="20dp"
  android:paddingRight="20dp"
  android:paddingBottom="20dp">
      <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/enter_username" />
      <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
      <Button
        android:id="@+id/dialog_button"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="OK"
        android:onClick="onClick" />

</LinearLayout>

Появляется диалог.Но кнопка не работает (приложение вылетает) - что вполне нормально, потому что в моем основном задании определена функция onClick для обратного вызова, а диалог - это новое действие (я прав?).

Но я действительно не знаю, как реализовать кнопку в диалоге - я думаю, что это фундаментальная проблема понимания техники.Долгий путь состоял бы в том, чтобы создать подкласс Dialog и написать там все, но есть ли другой способ, которого я не вижу?

1 Ответ

21 голосов
/ 06 ноября 2010

Обход, который я использую, вместо того, чтобы иметь блок переключателей, заключается в использовании onClickListeners для кнопок:

dialog = new Dialog(this);
dialog.setContentView(R.layout.custom_dialog);
dialog.setTitle("Custom Dialog");


Button dialog_btn = (Button) dialog.findViewById(R.id.dialog_button);
dialog_btn.setOnClickListener(new View.OnClickListener() 
{
    // Perform button logic
}

Обратите внимание, что вы находите представление из диалогового окна, а не просто вызываете прямой вызов findViewById, так как это возвращает нулевой указатель, поскольку в представлении приложения не будет dialog_button.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...