Je voudrais implémenter une méthode qui affiche une boîte de dialogue, attend que la boîte de dialogue soit fermée, puis renvoie un résultat en fonction du contenu de la boîte de dialogue. Est-ce possible?Android: attendre l'entrée de l'utilisateur à partir de la boîte de dialogue?
public String getUserInput()
{
//do something to show dialog
String input = //get input from dialog
return input;
}
Je suis en train d'essayer de mettre en œuvre une interface qui a méthode « public String getUserInput() », où la chaîne de retour doit être récupéré par boîte de dialogue. Cela se fait facilement en Java, semble impossible dans Android?
EDIT: affichage du code de l'échantillon tel que demandé dans le commentaire
getInput()
doit être appelé à partir d'un fil de fond (je l'appelle d'un AsynchTask). getInput() affiche une boîte de dialogue et les appels sont en attente. Lorsque le bouton OK est enfoncé dans la boîte de dialogue, la boîte de dialogue définit l'entrée utilisateur dans une variable membre et appelle notifier. Lorsque notify est appelé, getInput() continue et renvoie la variable membre.
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;
}
Vous ne pouvez pas attendre l'utilisateur dans une méthode appelée sur le thread d'interface utilisateur. Vous devez donc soit basculer vers un modèle de flux de programme piloté par événement, soit l'appeler à partir d'un thread d'arrière-plan qui peut attendre qu'une méthode onWhatever() appelle le thread d'interface utilisateur en réponse à l'action de l'utilisateur. –
Je ne comprends pas vraiment, pourriez-vous m'expliquer comment je l'appellerais d'un thread d'arrière-plan, puis retourner ma chaîne surWhatever()? – ab11
Parce que si vous bloquiez le thread de l'interface utilisateur pour plus de 3 (?), Je pense qu'il était trois secondes, vous obtiendrez une boîte de dialogue ANR demandant si vous souhaitez fermer l'application. Ne jamais exécuter de blocage sur le fil de l'interface utilisateur dans Android. –