Хорошо, это может быть просто, но я не могу понять, как это сделать. Как я могу изменить эту функцию, чтобы вернуть 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();
}
Возврат значения 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
}
Поведение (синхронный диалог), которое вы пытаетесь получить намеренно, не существует в android. Независимо от того, что вы хотите, чтобы щелкнуть кнопку диалога, нужно поместить его в метод OnClickListener.OnClick.
AlertDialog является асинхронным, и поэтому то, что вы хотите достичь, невозможно с помощью этого кода. вы можете установить String class_name как глобальное объявление, а затем инициализировать его
class_name = input.getText(). toString();
внутри метода предупреждения onClick.
Предполагая, что 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);
}
""
потому чтоaddClass
завершает работу задолго до вызоваaddClass
onClick()
для кнопки. И послеaddClass
анонимный класс является единственным классом, содержащим ссылку на Vector, поэтому мы не сможем получить доступ к его содержимому.alert.show
не модальный?