Как я могу остановить выполнение кода после показа диалога?(Android Studio) - PullRequest
0 голосов
/ 09 октября 2018

В самом начале моего приложения у меня появляется диалоговое окно, в котором пользователь может выбрать один из двух вариантов:

enter image description here

Код, из которого язапуск диалога выглядит следующим образом:

override fun onStart() {
    super.onStart()

    popup.show(supportFragmentManager, "example d")
    Log.d("TAG", "THIS SHOULD BE RUN AFTER I HAVE CLICKED ONE OF THE DIALOGUE BUTTONS")

    checkSharedPreference()
    switcher()
}

Проблема в том, что код не останавливается на popup.show(supportFragmentManager, "example d").Он продолжает работать.Я предполагаю, что это связано с асинхронностью диалога, нет?Как мне это решить?Completionhandler?Asynctask?Что-то еще?

ОБНОВЛЕНИЕ Я пытался построить часы в соответствии с тем, что @ Акшай Паливал сказал:

class MainActivity : AppCompatActivity() {

    public fun onCreateDialog(savedInstanceState: Bundle?): Dialog {

    val context = applicationContext
    val sharedPreference = context.getSharedPreferences(
            "key", Context.MODE_PRIVATE)

    val builder = AlertDialog.Builder(applicationContext)

    builder.setTitle("Välkommen till Demensvård utan tvång.")
            .setMessage("Berätta vem du är.")
            .setPositiveButton("Anhörig") { dialog, which ->
                val version = "anhorig"
                sharedPreference.edit().putString("version", version).apply()
                checkSharedPreference()
                switcher()
            }
            .setNegativeButton("Personal") { dialog, which ->
                val version = "personal"
                sharedPreference.edit().putString("version", version).apply()
                checkSharedPreference()
                switcher()
            }

    return builder.create()
}

override fun onStart() {
    super.onStart()

    //THIS? doesn't work...
    onCreateDialog(WHAT BUNDLE???)

    //OR THIS?
    onCreateDialog(what bundle?).show(supportFragmentManager, "example d")
}

How do I call the `onCreateDialog` function? `onCreateDialog(WHAT BUNDLE???)` what bundle should be passed? `onCreateDialog(what bundle?).show(supportFragmentManager, "example d")` Again what bundle? 

Или мне нужноесть onCreateDialog в отдельном классе, который расширяет AppCompatDialogFragment?В таком случае я могу позвонить main.switcher из обратного вызова в этом классе?

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Для этого следует использовать обратный вызов диалога, как показано ниже:

  1. Создать диалоговое окно или диалоговое окно с предупреждением
  2. получить обратный вызов при действии на кнопки

        AlertDialog.Builder builder = new AlertDialog.Builder(activity);
        builder.setMessage("message")
                .setTitle("Warning");
        builder.setPositiveButton("Done", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
    
                dialogInterface.dismiss();
                // do your go ahead task here like
                //checkSharedPreference()
                //switcher()
    
            }
        });
        builder.setNegativeButton(R.string.update_linkedin_app_cancel, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                dialogInterface.dismiss();
                finish(); // to finish current activity
            }
        });
        builder.create().show();
    
0 голосов
/ 09 октября 2018

Вы правы, всплывающее окно не является блокирующим.Насколько я знаю, Android был разработан, чтобы запретить разработчикам писать синхронные диалоги.

Здесь вы можете добавить обратный вызов в ваше всплывающее окно и обработать ответ в соответствующем методе слушателя.Переместите код из onStart () в ваш метод-обработчик, и он будет выполнен после того, как ваше всплывающее окно ответит.

В следующем примере вы добавите прослушиватель к одной из кнопок всплывающих окон и выполните код вметод onClick ():

popupButton.setOnClickListener(new OnClickListener();
 @Override
 public void onClick(View v) {
   Log.d("TAG", "THIS SHOULD BE RUN AFTER I HAVE CLICKED ONE OF THE DIALOGUE BUTTONS")
 } });
...