Ich möchte eine Methode implementieren, die einen Dialog anzeigt, wartet, bis der Dialog geschlossen wird, und gibt dann ein Ergebnis abhängig von dem Dialoginhalt zurück. Ist das möglich?Android: Warten auf Benutzereingabe von Dialog?
public String getUserInput()
{
//do something to show dialog
String input = //get input from dialog
return input;
}
Ich versuche tatsächlich eine Schnittstelle zu implementieren, die Methode „public String GetUserInput()“ hat, wo die zurückgegebene Zeichenfolge über Dialog abgerufen werden. Dies ist einfach in Java, scheint unmöglich in Android?
EDIT: Buchung einige Codebeispiel als
in Kommentar angefordertgetInput()
muss von einem Hintergrund-Thread aufgerufen werden (ich es von einem AsynchTask nennen). getInput() zeigt einen Dialog an und Aufrufe warten. Wenn die OK-Schaltfläche im Dialogfeld gedrückt wird, legt das Dialogfeld die Benutzereingabe in einer Mitgliedsvariablen fest und ruft notify auf. Wenn notify aufgerufen wird, wird getInput() fortgesetzt und gibt die Membervariable zurück.
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;
}
Sie können nicht auf den Benutzer in einer Methode warten, die im UI-Thread aufgerufen wird. Sie müssen also entweder zu einem ereignisgesteuerten Modell des Programmablaufs wechseln oder dieses aus einem Hintergrundthread aufrufen, der warten kann, bis eine onWhatever() -Methode im Benutzeroberflächenthread aufgerufen wird, die auf Ihre Hintergrundmethode wartet. –
Ich verstehe nicht wirklich, können Sie erklären, wie ich dies von einem Hintergrund-Thread nennen würde, und dann meine Zeichenfolge auf Was auch immer() zurückgeben? – ab11
Wenn Sie den Benutzeroberflächen-Thread für mehr als 3 (?) Blockieren würden, würden Sie nach drei Sekunden ein ANR-Dialogfeld erhalten, in dem Sie gefragt werden, ob Sie die Anwendung schließen möchten. Führen Sie niemals blockierende Inhalte im UI-Thread von Android aus. –