Я хотел бы реализовать метод, который отображает диалог, ждет, пока диалог не будет отклонен, а затем вернет результат в зависимости от содержимого диалогового окна. Это возможно?Android: подождите от ввода пользователем диалогового окна?
public String getUserInput()
{
//do something to show dialog
String input = //get input from dialog
return input;
}
Я на самом деле пытаюсь реализовать интерфейс, который имеет метод «общественный Строка getUserInput()», где возвращаемая строка должна быть восстановлена с помощью диалога. Это легко сделать в java, кажется невозможным в android?
EDIT: Проводка некоторые примеры кода в соответствии с просьбой в комментарии
getInput()
должна быть вызвана из фонового потока (я называю это из AsynchTask). getInput() отображает диалог и вызывает ожидание. Когда в диалоговом окне нажата кнопка ok, диалог устанавливает пользовательский ввод в переменной-члене и вызывает уведомление. Когда вызывается уведомление, getInput() продолжается и возвращает переменную-член.
String m_Input;
public synchronized String getInput()
{
runOnUiThread(new Runnable()
{
@Override
public void run()
{
AlertDialog.Builder alert = new AlertDialog.Builder(context);
//customize alert dialog to allow desired input
alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton)
{
m_Input = alert.getCustomInput();
notify();
}
});
alert.show();
}
});
try
{
wait();
}
catch (InterruptedException e)
{
}
return m_Input;
}
Вы не можете дождаться пользователя в методе, вызываемом в потоке пользовательского интерфейса. Таким образом, вы должны либо переключиться на управляемую событиями модель потока программ, либо вызвать это из фонового потока, который может подождать, пока метод onWhatever() не будет вызван в поток пользовательского интерфейса в ответ на обновления действий пользователя, которые ожидал ваш фоновый метод. – 2010-12-07 20:42:50
Я действительно не понимаю, не могли бы вы объяснить, как я назвал бы это из фонового потока, а затем верну свою строку вверх на WhatWhatever()? – ab11 2010-12-07 20:46:52
Потому что, если вы будете блокировать поток пользовательского интерфейса более чем на 3 (?), Я думаю, что было три секунды, когда вы получите всплывающее диалоговое окно ANR, спрашивающее, хотите ли вы закрыть приложение. Никогда не запускайте блокирующие элементы в потоке пользовательского интерфейса в Android. – 2010-12-07 20:56:24