Проблема с кнопкой AlertDialog в Android - PullRequest
0 голосов
/ 14 августа 2011

У меня есть Alert Dialog, который должен установить логическое значение true. Для setPositiveButton интерфейс Dialog onclick у меня нулевой. Когда я добавляю onClickListener к интерфейсу setNegativeButtons onclick, это дает мне ошибку компиляции, говорящую: метод setNegativeButton(int, DialogInterface.OnClickListener) в типе AlertDialog.Builder не применим для аргументов (String, new View.OnClickListener(){})

Вот мой код, почему я получаю ошибку компиляции и как это исправить? Спасибо

new AlertDialog.Builder(ImTracking.this)
    .setMessage(
            Html.fromHtml(getText("http://www.cellphonesolutions.net/im-following-"
                    + getResources().getString(
                            R.string.Country))))
    .setPositiveButton("OK", null)
    // The red squigly is under the .setNegativeButton
    .setNegativeButton("Don't Remind", new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub

            SharedPreferences prefs= getSharedPreferences("Settings",0);
            SharedPreferences.Editor editor=prefs.edit();
            editor.putBoolean("ImTrackingDontRemind",true);
            editor.commit();
        }
    }).show();

Ответы [ 3 ]

7 голосов
/ 14 августа 2011

Так это и должно было быть

  alertDialog.setNegativeButton("Don't Remind", new DialogInterface.OnClickListener() {
      public void onClick(DialogInterface dialog, int which) {

                        // TODO Auto-generated method stub

                        SharedPreferences prefs= getSharedPreferences("Settings",0);
                        SharedPreferences.Editor editor=prefs.edit();
                        editor.putBoolean("ImTrackingDontRemind",true);
                        editor.commit();

    } });
5 голосов
/ 14 августа 2011

Вот ваше решение, вы сделали глупую ошибку, приятель.

Это не должно быть

.setNegativeButton("Don't Remind", new OnClickListener() 

Это должно быть

.setNegativeButton("Don't Remind", new DialogInterface.OnClickListener()
2 голосов
/ 20 апреля 2013

В дополнение к предоставлению ответа, возможно, было бы разумно также дать объяснение, почему это ответ. Плюс, вопрос Шона был

... почему я получаю ошибку компиляции и как я могу это исправить?

Акцент мой. Хотя принятый ответ отвечает на последний вопрос, он не пытается ответить на предыдущий вопрос.

Шон, создаваемый вами анонимный внутренний класс onClickListner на самом деле является функцией-членом View, поскольку вы не указали имя класса. Ваша ошибка компиляции проистекает из того факта, что AlertDialog расширяет класс Dialog, а не класс View и, следовательно, имеет функцию-член onClickListner с другой сигнатурой функции:

public abstract void onClick (DialogInterface dialog, int which)

чем View onClickListner функция-член:

public abstract void onClick (View v).

...