W większości przypadków potrzebuję, aby użytkownik dokonał wyboru wiele razy. (Robię coś i podnosimy okno komunikatu, aby użytkownik mógł dokonać wyboru i kontynuować wykonywanie innych czynności (może nazywać się blokowaniem)) Więc napisałem wspólną funkcjęSposób korzystania z wartości zwracanej przez AlertDialog
public static void ShowMsgDialog(Context self,String title, String msg)
Chociaż właściwie response działania użytkownika, ale zawsze do czasu (co oznacza, że podczas gdy klikam przycisk, wartość poprzednią czynność jest widoczny przez wartość zmiennej globalnej w) Czy istnieje istnieje jakakolwiek funkcja, dzięki której mogłem uzyskać wartość zwracaną przez skrzynkę komunikacyjną i użyć jej w następujący sposób:
int ret = ShowMsgDialog(Context self,String title, String msg);
kontynuacją jest mój kod:
public class MainActivity extends Activity {
private Button button1;
enum Answer { YES, NO, ERROR};
static Answer choice;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1 = (Button)findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
ShowMsgDialog(MainActivity.this, "Information", "you choice? ");
if(choice == Answer.YES)
Toast.makeText(MainActivity.this, "YOU CHOICED YES", Toast.LENGTH_LONG).show();
else if (choice == Answer.NO)
Toast.makeText(MainActivity.this, "YOU CHOICED NO", Toast.LENGTH_LONG).show();
else
Toast.makeText(MainActivity.this, "ERROR OCUS", Toast.LENGTH_LONG).show();
//int ret = ShowMsgDialog(MainActivity.this, "Information", "you choice? ");
}
});
}
public static void ShowMsgDialog(Context self,String title, String Msg){
AlertDialog.Builder dlgAlert = new AlertDialog.Builder(self);
dlgAlert.setTitle(title);
dlgAlert.setMessage(Msg);
dlgAlert.setPositiveButton("OK",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// call your code here
choice = Answer.YES;
}
});
dlgAlert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
choice = Answer.NO;
}
});
dlgAlert.show();
}
}
w innej funkcji, zamierzam użyć powrotu z funkcji wartość. jeśli używam zmiennej globalnej, to nie wiem, które wartości dla – George
które wywołanie funkcji spowodowało wartość zmiennej odpowiedzi, nie wiem – George
nie mogę zrozumieć, co masz na myśli przepraszam, czy możesz napisać to lepiej? : S, ale uważam, że jedynym ważnym rozwiązaniem, które pozwala uzyskać wartość zwrotną, jest wywołanie innej funkcji, która zaktualizuje twój interfejs użytkownika zgodnie z twoimi potrzebami, ponieważ gdy pokazujesz AlertDialog, nie ma możliwości potwierdzenia, kiedy okno dialogowe zostanie zamknięte od użytkownika i nie można po prostu wstrzymać wątku interfejsu użytkownika i czekać, aż zwrócona zostanie wartość z alertDialog. Więc musisz użyć czegoś takiego jak mój przykład. – ManosProm