Intereting Posts
Обработка сеансов в Google App Engine с помощью Android / IPhone Почему Camera.setParameters (Camera.Parameters) не работает на Sony-Ericsson X10 и Droid? Android Studio: Android Manifest не существует или имеет неправильный корневой тег Получение JSONException: конец ввода символа 0 Надежность получения высоты строки состояния для решения проблемы прозрачной навигации KitKat Android RecyclerView.Adapter onCreateViewHolder () работает Переупорядочение элементов списка с помощью перетаскивания с помощью android Поддержка Android-v7-appcompat с 4.0 и выше Можно ли перетащить элемент за пределы RecyclerView? Как включить дополнительные пакеты javax. * В Android-приложение с Eclipse? Android abortBroadcast не останавливает передачу sms от трансляции Почему VoiceListener на основе Glass / GDK только захватывает VoiceCommand один раз в XE16? Почему DialogFragment.onCreateView вызывается при уничтожении Activity? Как найти и включить режим отладки USB на Nexus 4 Android, как использовать DexClassLoader для динамической замены Activity или Service

Как я могу получить результаты из AlertDialog?

Я использую AlertDialog.Builder для отображения диалогового окна, предлагающего пользователю ввести пароль, поэтому я хочу сохранить этот пароль в предпочтении, однако я не могу понять, как получить результат из метода ввода диалогового окна предупреждения.

Вот что я хотел бы сделать:

String result; AlertDialog.Builder b = new AlertDialog.Builder(this); b.setTitle("Please enter a password"); final EditText input = new EditText(this); b.setView(input); b.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int whichButton) { //I get a compile error here, it wants result to be final. result = input.getText().toString(); } }); b.setNegativeButton("CANCEL", null); b.create().show(); 

Однако я открыт для выполнения чего-то вроде showDialog(int); Затем используя метод onCreateDialog(int) и каким-то образом устанавливая результат и получая его каким-либо другим способом, но я понятия не имею, как перейти к последней части.

Solutions Collecting From Web of "Как я могу получить результаты из AlertDialog?"

 public class MyActivity extends Activity { private String result; void showDialog() { AlertDialog.Builder b = new AlertDialog.Builder(this); b.setTitle("Please enter a password"); final EditText input = new EditText(this); b.setView(input); b.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int whichButton) { result = input.getText().toString(); } }); b.setNegativeButton("CANCEL", null); b.show(); } } 

Упрощенный пример:

 public interface TextListener { void onPositiveResult(CharSequence text); } public static AlertDialog getTextDialog(Context ctx, final TextListener listener) { View view = LayoutInflater.from(ctx).inflate(R.layout.dialog, null); final TextView tv = (TextView) view.findViewById(R.id.tv); AlertDialog.Builder builder = new AlertDialog.Builder(ctx); builder.setView(view); // builder.setPositiveButton(android.R.string.ok, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { listener.onPositiveResult(tv.getText()); } }); builder.setNegativeButton(android.R.string.cancel, null); return builder.create(); } 

– EDIT – Или вы попробуете этот код:

  public class Main extends Activity { private Button btn; private String result; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); btn = (Button) findViewById(R.id.button1); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { showDialog(0); } }); } @Override protected Dialog onCreateDialog(int id) { switch (id) { case 0: final EditText input = new EditText(this); return new AlertDialog.Builder(this) .setIcon(R.drawable.icon) .setTitle("Please enter a password") .setView(input) .setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { Toast.makeText(getBaseContext(), input.getText().toString(), Toast.LENGTH_SHORT).show(); } }) .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { Toast.makeText(getBaseContext(), "Cancel clicked!", Toast.LENGTH_SHORT).show(); } }).create(); } return null; } } 

Переменный результат, сделайте его переменной-членом вместо локальной переменной. Создавая «результат» в качестве переменной-члена, он доступен во всей деятельности (родительский класс, который расширяет активность)

Слабое, но быстрое решение:

Объявить метод уровня активности:

 TextView lblDiaDestination; public void dialogReturn(String msg){ lblDiaDestination.setText(msg); } 

И назовите его с помощью позитивного переключателя кликов:

 alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { dialogReturn( input.getText().toString().trim() ); }); 

Вы можете изменить значение lblDiaDestination непосредственно перед alert.show ():

 lblDiaDestination = myTextView; alert.show(): 

Вы можете следовать руководству Dialog на developer.android.com.

Сначала создайте диалоговый класс:

Добавление списка

Затем добавьте слушателя в этот класс, чтобы передать результат активности.

Передача событий Назад к хосту диалога

Это довольно долго. Надеюсь, мой вклад может быть полезен для новых гостей. Я думаю, что ключ к ответу на вопрос заключается в объявлении переменной результата как члена активности (назовем это YourActivity ). Затем изнутри метода « onClick» используйте « YourActivity.this.result» для доступа к этой переменной.

Я редактирую коды @finiteloop, как показано ниже:

 public class YourActivity extends Activity { private String result; // other activity stuff void showDialog(){ AlertDialog.Builder b = new AlertDialog.Builder(this); b.setTitle("Please enter a password"); final EditText input = new EditText(this); b.setView(input); b.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int whichButton) { YourActivity.this.result = input.getText().toString(); } }); b.setNegativeButton("CANCEL", null); b.create().show(); } }