2013-11-12 3 views
4

Я нашел код для построения некоторых inputboxes и они хорошо, но в этом коде просто не работает:Android: «Конструктор AlertDialog.Builder (новый View.OnClickListener() {}) не определен» ошибка

View.OnClickListener handleOnClick(final TextView textview) { 
    return new View.OnClickListener() { 
     public void onClick(View v) { 

      if(editOn==1){ 
       textview.setText("neuer Text"); 

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

       alert.setTitle("Hinzufügen"); 
       alert.setMessage("Name des neuen Eintrags"); 

       final EditText input = new EditText(this); 
       alert.setView(input); 

       alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 
        String entryInput = input.getText().toString(); 
        loadUp(entryInput,"0","1.1.2000"); 
        } 
       }); 

       alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int whichButton) { 
        } 
       }); 


      } 
     } 
    }; 
} 

Он говорит, что «конструктор AlertDialog.Builder (новый View.OnClickListener() {}) не определено» Всякий раз, когда я пытаюсь вставить что-то в».. новый AlertDialog.Builder (это), то У меня нет ошибок. Я знаю, что «это» должно ссылаться на что-то. Когда я использовал этот фрагмент кода в элементе menuitem, он работает хорошо, но я хочу использовать его всякий раз, когда я активировал свою кнопку редактирования (вот что, если (editOn == 1) означает) и нажмите на текстовом изображении. Это немного путано, я думаю, но я надеюсь, что кто-то там поймет, что мне нужно, и может помочь мне!

+0

Вы проверили, какие аргументы нужен этому конструктору? То, что я вижу в документах, заключается в том, что требуется контекст - public AlertDialog.Builder (контекст контекста) - поэтому вы должны передать в качестве аргумента хотя бы экземпляр класса, который происходит из контекста. – fgeorgiew

+0

Я не понимаю, если честно ... – besplash

ответ

16

Вы пытаетесь отправить экземпляр clickListener в конструктор AlertDialog.Builder.

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

Попробуйте отправить экземпляр своей деятельности. Например, если ваше имя активность MainActivity твое это:

AlertDialog.Builder alert = new AlertDialog.Builder(MainActivity.this); 

или:

AlertDialog.Builder alert = new AlertDialog.Builder(v.getContext()); 

Edit: Чтобы показать AlertDialog использовать его show() метод:

AlertDialog dialog = alert.create(); 
dialog.show(); 

See docs

+0

У меня ужасные проблемы с пониманием документов. Ваши примеры не работают./ – besplash

+0

Я думаю, вы также забыли использовать его метод show. См. Мой отредактированный ответ. – Devrim

+1

@besplash: но он отвечает на основную проблему в вашем коде. Ваш указатель указывает на любой класс, в котором вы сейчас находитесь, и это OnClickListener, который не имеет тип Context. Итак, как говорит эгейский герой, вам нужно обратиться к окружающему классу Activity. Вы делаете это, запрашивая соответствующий класс по имени и используя его этот указатель. (Например, MainActivity.this, если это то, что называется.) –

0

Этот вопрос довольно старый, но, возможно, кто-то найдет это полезным! :)

AlertDialog.Builder builder = new AlertDialog.Builder(((MainActivity) getActivity())); 
     builder.setMessage("No connectivity").setCancelable(false) 
      .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog,int id) { 
       } 
      }); 
     AlertDialog alert = builder.create(); 
     alert.show(); 
Смежные вопросы