Пользовательский AlertDialog.Builder добавление пользовательского нажатия кнопки события - PullRequest
0 голосов
/ 29 февраля 2012

В моем пользовательском «Диалоге предупреждений» у меня возникла дилемма установки щелчка по кнопке, которую я объявил на xml.

Этот код дал мне исключение нулевого указателя, которое было подтверждено, что естьфактический alertDialog после того, как это было реализовано

close.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                alertDialog.dismiss();
            }
        });

LayoutInflates после нажатия элемента в ListView.

Мой вопрос такой: «Как настроить настраиваемые xml onClickListeners для кнопок на настраиваемом AlertDialog?"

    LayoutInflater inflater = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE);
    View layout = inflater.inflate(R.layout.custom_dialog, (ViewGroup) findViewById(R.id.layout_root));

    TextView text = (TextView) layout.findViewById(R.id.data1);
    ImageView image = (ImageView) layout.findViewById(R.id.dialog_image);
    image.setImageResource(R.drawable.temp_book);
    Button summary, confirm, close;
    summary = (Button)findViewById(R.id.Summary);
    confirm = (Button)findViewById(R.id.confirmCD);
    close = (Button)findViewById(R.id.closeCD);
    builder = new AlertDialog.Builder(this);
    builder.setView(layout);

    close.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            alertDialog.dismiss();
        }
    });

    alertDialog = builder.create();

    alertDialog.show();

Ошибка журнала

02-28 15:13:28.385: E/AndroidRuntime(6763): FATAL EXCEPTION: main

02-28 15:13:28.385: E/AndroidRuntime(6763): java.lang.NullPointerException

02-28 15:13:28.385: E/AndroidRuntime(6763):     at test.list.A_Test4Activity.onListItemClick(A_Test4Activity.java:532)

02-28 15:13:28.385: E/AndroidRuntime(6763):     at android.app.ListActivity$2.onItemClick(ListActivity.java:319)

02-28 15:13:28.385: E/AndroidRuntime(6763):     at android.widget.AdapterView.performItemClick(AdapterView.java:292)

02-28 15:13:28.385: E/AndroidRuntime(6763):     at android.widget.AbsListView.performItemClick(AbsListView.java:1058)

02-28 15:13:28.385: E/AndroidRuntime(6763):     at android.widget.AbsListView$PerformClick.run(AbsListView.java:2514)

02-28 15:13:28.385: E/AndroidRuntime(6763):     at android.widget.AbsListView$PerformClick.run(AbsListView.java:2514)

02-28 15:13:28.385: E/AndroidRuntime(6763):     at android.widget.AbsListView$1.run(AbsListView.java:3168)

02-28 15:13:28.385: E/AndroidRuntime(6763):     at android.os.Handler.handleCallback(Handler.java:605)

02-28 15:13:28.385: E/AndroidRuntime(6763):     at android.os.Handler.dispatchMessage(Handler.java:92)

02-28 15:13:28.385: E/AndroidRuntime(6763):     at android.os.Looper.loop(Looper.java:137)

02-28 15:13:28.385: E/AndroidRuntime(6763):     at android.app.ActivityThread.main(ActivityThread.java:4340)

02-28 15:13:28.385: E/AndroidRuntime(6763):     at java.lang.reflect.Method.invokeNative(Native Method)

02-28 15:13:28.385: E/AndroidRuntime(6763):     at java.lang.reflect.Method.invoke(Method.java:511)

02-28 15:13:28.385: E/AndroidRuntime(6763):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)

02-28 15:13:28.385: E/AndroidRuntime(6763):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)

02-28 15:13:28.385: E/AndroidRuntime(6763):     at dalvik.system.NativeStart.main(Native Method)

1 Ответ

3 голосов
/ 29 февраля 2012

Не видя никаких стековых трасс за исключением, я бы сказал, что вы не смотрите туда, где вы должны искать Button close .Если вы устанавливаете макет для AlertDialog в пользовательский макет, который вы надуваете, или код, созданный View, тогда вам нужно будет findViewById(R.id.Id_of_button) на том View, который вы указали в качестве AlertDialog контента.

РЕДАКТИРОВАНИЕ:

close Button равно null (и выбрасывает NullPointerException при вызове метода для него), потому что вы должнынайдите Button в макете, который ранее был раздувается и использовался как содержимое AlertDialog:

close = (Button) layout.findViewById(R.id.closeCD);

Не забудьте о сводке и подтверждения Buttons, если они также находятся в раздутом макете.

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