Как не открывать новое диалоговое окно Alert, если оно уже открыто во фрагменте - PullRequest
0 голосов
/ 24 октября 2018

Я работаю над этим фрагментом, где у меня есть два текста для редактирования, и при индивидуальном нажатии открывается диалоговое окно с предупреждением.Я сталкивался с этой проблемой, когда при быстром нажатии на текст редактирования один за другим открываются два диалоговых окна с предупреждениями друг над другом.Есть ли способ, которым я могу избежать этого.

Я пытался использовать <item name="android:splitMotionEvents">false</item> в AppTheme, а также использовал это решение , но эти решения решают другой сценарий.

Любые указатели приветствуются

Ответы [ 4 ]

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

Вы можете использовать isShowing() метод

  AlertDialog yourAlertDialog = new AlertDialog.Builder(getContext()).create();

    if(!yourAlertDialog.isShowing()){
        //Here you can show your dialog else not       
        yourAlertDialog.show()
    }

IN KOTLIN

 val alertDialog= activity?.let { AlertDialog.Builder(it).create() };

        if(!alertDialog?.isShowing!!){
            //Here you can show your dialog else not       
            alertDialog.show()
        }

В случае, если у вас есть два или более диалоговых окна,

  val alertDialog1= activity?.let { AlertDialog.Builder(it).create() };
     val alertDialog2= activity?.let { AlertDialog.Builder(it).create() };
     val alertDialog3= activity?.let { AlertDialog.Builder(it).create() };

 if(alertDialog1?.isShowing!! && alertDialog1?.isShowing!!){
               //Some dialog is shown
            }else{
               //Here you can show your dialog else not       
                alertDialog3.show()
              }
0 голосов
/ 24 октября 2018

Вы можете использовать решение здесь, если выполните следующие действия:

  • Вместо вызова расширения View.setSafeOnClickListener, установите SafeClickListener в локальное поле:

    val safeClickListener = SafeClickListener { view -> when(view.id) { R.id.input1 -> // onClick event for input1 R.id.input2 -> // onClick event for input2 } }

  • , затем установите прослушиватель щелчка для этих представлений, чтобы использовать один и тот же экземпляр SafeClickListener:

    findViewById<View>(R.id.input1).setOnClickListener(safeClickListener) findViewById<View>(R.id.input2).setOnClickListener(safeClickListener)

Таким образом, интервал, используемый в SafeClickListener, предотвратит быстрое событие второго щелчка в любом из представлений.

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

Там может быть несколько способов, которыми вы можете справиться с этим сценарием.Если вам нужно сохранить его в чистоте без использования каких-либо логических переменных, используйте метод isShowing () .

.

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

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

    val input1 : EditText = findViewById(R.id.input1)
    val input2 : EditText = findViewById(R.id.input2)

    input1.setOnFocusChangeListener { _, b ->
        if(b)
        {
            input2.isEnabled = false
            AlertDialog.Builder(this).setTitle("input1").setMessage("input1").setNeutralButton("ok"){ _, _ ->
                input2.isEnabled = true
            }.create().show()
        }
    }
    input2.setOnFocusChangeListener { _, b ->
        if(b)
        {
            input1.isEnabled = false
            AlertDialog.Builder(this).setTitle("input2").setMessage("input2").setNeutralButton("ok"){ _, _ ->
                input1.isEnabled = true
            }.create().show()
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...