как отключить кнопку ok в окне оповещения в Android

#android #android-alertdialog

#Android #android-alertdialog

Вопрос:

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

мой код создания окна оповещения:

     helpBuilder1 = new AlertDialog.Builder(Home.this);
    helpBuilder1.setTitle("Welcome");
    helpBuilder1.setMessage("Thank you for waiting while App Installs");

    mOkButton = helpDialog1.getButton(AlertDialog.BUTTON_POSITIVE);
    mOkButton.setEnabled(false);

    if(mOkButton.isEnabled()==false){
        Log.e("Home.java - ShowPopUp", "button is disablled");
        new First_Time_Sync().execute();
    }

    mOkButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {

            helpDialog1.dismiss();
            showSilde_show_PopUp();

        }
    });

    helpDialog1 = helpBuilder1.create();
    helpDialog1.show(); 
  

пожалуйста, помогите мне.

Комментарии:

1. необходимо, чтобы это был AlertDialog? Почему бы не реализовать как ProgressDialog? Почему кнопка OK должна существовать?

2. я должен отключить кнопку ok до завершения фонового процесса. после включения кнопки ok пользователь взаимодействует с приложением. мне это нужно в окне оповещения. пожалуйста, помогите мне.

3. Вместо этого я бы предпочел показывать индикатор выполнения, как только вы закончите процесс загрузки, просто покажите окно оповещения с кнопкой ok. Я уверен, что это лучшая практика вместо того, что вы прокомментировали ранее.

Ответ №1:

Используйте getButton() в AlertDialog, чтобы получить доступ к базовой кнопке ok

 Button mOkButton = helpDialog1.getButton();
mOkButton.setEnabled(false)`
  

Комментарии:

1. я получаю сбой кнопки приложения mOkButton = helpDialog1.getButton(); mOkButton. Значение setEnabled(false) находится над helpDialog1 = helpBuilder1.create(); Но helpDialog1 = helpBuilder1.create(); находится перед кнопкой mOkButton, которая не отображает кнопку. пожалуйста, обновите соответствующий xml.

Ответ №2:

к сожалению, кажется, что нет прямого способа API. однако это моя идея о более нестандартном решении: [Обновление при вводе: решение Rajdeeps звучит разумно, попробуйте сначала это 😉 Если это не поможет, попробуйте это.]

создайте пользовательский макет AlertDialog с вашей кнопкой и добавьте его в свой AlertDialog с помощью

 LayoutInflater inflater = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.yourlayout,(ViewGroup) findViewById(R.id.yourLayoutsOuterLinearLayout));
builder.setView(view);
  

макет может выглядеть примерно так:

 <LinearLayout
  android:id="@ id/yourLayoutsOuterLinearLayout"
  android:layout_height:...>
  <Button
    android:id="@ id/myButton"
    android:...>
  </Button>
</LinearLayout>