Не удается заставить AlertDialog работать - PullRequest
0 голосов
/ 10 ноября 2010

У меня есть onLongClickListener, который сбрасывает некоторые значения при вызове.Я хотел бы объявить alertDialog, чтобы проверить, действительно ли пользователь хочет сбросить все значения.Однако я не испытываю радости от того, что он работает.

Секция сброса прекрасно работает сама по себе, но если я пытаюсь добавить AlertDialog, я получаю следующую ошибку:

Несколько маркеров вэта строка - Конструктор AlertDialog.Builder (новый View.OnLongClickListener () {}) не определен - Точка останова строки: SatFinder [line: 174] - onLongClick (View)

Что именно это означает икак я могу это исправить?Большое спасибо.

Ниже приведен раздел кода.Обратите внимание, что в этом примере предупреждение ничего не дает.Я изменю это после того, как я преодолею ошибку выше.

    resetAll = new OnLongClickListener() {

   @Override
   public boolean onLongClick(View v) {

    AlertDialog.Builder alertbox = new AlertDialog.Builder(this);

       // set the message to display
       alertbox.setMessage("This is the alertbox!");

       // set a positive/yes button and create a listener
       alertbox.setPositiveButton("Yes", new DialogInterface.OnClickListener() {

           // do something when the button is clicked
           public void onClick(DialogInterface arg0, int arg1) {
               Toast.makeText(getApplicationContext(), "'Yes' button clicked", Toast.LENGTH_SHORT).show();
           }
       });

       // set a negative/no button and create a listener
       alertbox.setNegativeButton("No", new DialogInterface.OnClickListener() {

           // do something when the button is clicked
           public void onClick(DialogInterface arg0, int arg1) {
               Toast.makeText(getApplicationContext(), "'No' button clicked", Toast.LENGTH_SHORT).show();
           }
       });

       alertbox.show();

    // Resets all values and radio buttons
    pos1_deg.setText("0.0");
    pos2_deg.setText("0.0");
    pos1_az.setText("0.0");
    pos2_az.setText("0.0");
    targetDeg.setText("0.0");
    blurg.setText("----");

    radio1.setChecked(false);
    radio2.setChecked(false);
    radio3.setChecked(false);
    radio1E.setChecked(true);
    radio2E.setChecked(true);
    radio3E.setChecked(true);

    Toast.makeText(getApplicationContext(), 
      "Reset", Toast.LENGTH_LONG).show();

    return true;
   }

};

Ответы [ 2 ]

12 голосов
/ 14 ноября 2010

Проблема в том, что эта строка кода:

AlertDialog.Builder alertbox = new AlertDialog.Builder(this);

фактически находится внутри анонимного внутреннего класса, который реализует интерфейс OnLongClickListener.Аргументом для конструктора AlertDialog.Builder () должен быть объект Context .this в качестве аргумента здесь относится к анонимному объекту внутреннего класса, который не расширяет Context.Я предполагаю, что ваш размещенный фрагмент кода находится внутри объекта Activity , в этом случае измените строку на:

AlertDialog.Builder alertbox = new AlertDialog.Builder(OuterClass.this);

где OuterClass - это имявашего класса Activity, что этот метод внутри.Это синтаксис, используемый для ссылки на объект, в котором определен внутренний класс.

0 голосов
/ 25 июля 2014
AlertDialog.Builder alertbox = new AlertDialog.Builder(v.getContext());
...