Возврат через несколько функций

1

Хорошо, это может быть просто, но я не могу понять, как это сделать. Как я могу изменить эту функцию, чтобы вернуть String class_name? Я знаю, что мне нужно изменить функцию от void до String, но что еще мне нужно сделать?

Очень ценно!

public void addClass() {
    AlertDialog.Builder alert = new AlertDialog.Builder(this);  

    alert.setTitle("Add Class");

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

    alert.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {  
        public void onClick(DialogInterface dialog, int whichButton) {  
            String class_name = input.getText().toString();
        }  
    });  

    alert.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {  
        public void onClick(DialogInterface dialog, int whichButton) {  
        }  
    });  

    alert.show();
}
Теги:

4 ответа

2

Возврат значения class_name не помогает. Вы должны реализовать метод обратного вызова, который принимает значение и выполняет требуемое действие:

public void addClass() {
    AlertDialog.Builder alert = new AlertDialog.Builder(this);  

    // ...

    alert.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {  
        public void onClick(DialogInterface dialog, int whichButton) {  
            setClassName(input.getText().toString());
        }  
    });  

    // ...
}

protected void setClassName(String class_name) {
  // do what ever has to be done with class_name
}
1

Поведение (синхронный диалог), которое вы пытаетесь получить намеренно, не существует в android. Независимо от того, что вы хотите, чтобы щелкнуть кнопку диалога, нужно поместить его в метод OnClickListener.OnClick.

0

AlertDialog является асинхронным, и поэтому то, что вы хотите достичь, невозможно с помощью этого кода. вы можете установить String class_name как глобальное объявление, а затем инициализировать его

class_name = input.getText(). toString();

внутри метода предупреждения onClick.

0

Предполагая, что alert.show не возвращается, пока input.getText() не содержит введенное значение, вы можете попробовать:

public void addClass() {
   final Vector<String> retval = new Vector<String>();
   retval.add("");

   ...
   ...
     alert.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {  
          public void onClick(DialogInterface dialog, int whichButton) {  
            String class_name = input.getText().toString();
            retval.set(0,class_name);
      }  
});  

...
...

  return retval.get(0);
}
  • 0
    Это всегда будет возвращать "" потому что addClass завершает работу задолго до вызова addClass onClick() для кнопки. И после addClass анонимный класс является единственным классом, содержащим ссылку на Vector, поэтому мы не сможем получить доступ к его содержимому.
  • 0
    так что alert.show не модальный?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню