2010-11-10 5 views
0

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

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

Несколько маркеров на этой линии - Конструктор AlertDialog.Builder (новый View.OnLongClickListener() {}) является неопределенными - линия точек останова: SatFinder [линия: 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; 
    } 

}; 
+0

без маркеров линии, это немного сложно; какая строка составляет 174? – KevinDTimm

ответ

12

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

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

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

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

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

+0

Хорошее объяснение, я надеялся, что ОП определит разницу между его кодом и кодом связанного решения, самостоятельно выяснив ответ. – KevinDTimm

+0

Я не стал смотреть на вашу ссылку, но вы правы, это также решает проблему. ИМО - точка сообщества, подобная этому, НЕ ТОЛЬКО, чтобы помочь кому-то решить проблему, но также иметь решение, содержащееся на сайте, для будущих поисков, а не просто ссылку на внешний ресурс. –

0
AlertDialog.Builder alertbox = new AlertDialog.Builder(v.getContext()); 
Смежные вопросы