Intereting Posts
Дешифрование ошибки в java DialogFragment и сила для отображения клавиатуры Android.database.CursorWindowAllocationException: выделение окна курсора 2048 кб не удалось даже после закрытия курсора Установить состояние BottomSheetDialogFragment для расширенного Включить LogCat при выпуске сборки в Android Studio CollapsingToolbarLayout с tablayout и изображением как рушится с липкой панелью инструментов Меню опций Android при нажатии кнопки Open-sourcing мобильное приложение Как удалить приложение Android из командной строки на устройстве Start avd не работает, говоря, что он не может найти эмулятор, но он существует Специальная раскладка клавиатуры для Android, оставляющая край белого цвета сбоку Воспроизведение звука независимо от уровня громкости устройства Фильтрация с помощью Logcat? ProGuard не скомпилировался с использованием Joda Time, используемого в Windows Создайте экземпляр абстрактного класса в Котлине

Как я могу получить результаты из 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(); } }