2014-01-29 7 views
0

У меня есть несколько кнопок в ListView. Когда пользователь нажимает на кнопку, появляется сообщение AlertDialog. Однако, занимает некоторое время, пока AlertDialog покажет, так как есть изображения для загрузки.Подождите, пока AlertDialog покажет

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

slotViewHolder.layout.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     ProgressDialog progressDialog = new ProgressDialog(context); 
     progressDialog.setMessage("showing dialog..."); 
     progressDialog.show(); 

     loadDialogAndDoSomeAction(); 

     progressDialog.dismiss(); 
    } 
}); 

ПрогрессDialog все еще не отображается. Что я здесь делаю неправильно? Есть ли лучшие способы, чем это, чтобы пользователь не мог что-то сделать, но ждать?

Заранее спасибо

+0

включения и кнопка отключения соответственно – Raghunandan

+0

на самом деле, они нет реальных кнопок, но RelativeLayouts, которые можно щелкнуть –

+0

progressDialog.setCanceledOnTouchOutside (false); –

ответ

0

Ok я решил ее реализации onShowListener на мой progressDialog

slotViewHolder.layout.setOnClickListener(new View.OnClickListener() { 
@Override 
public void onClick(View v) { 
    ProgressDialog progressDialog = new ProgressDialog(context); 
    progressDialog.setMessage("showing dialog..."); 

    progressDialog.setOnShowListener(new OnShowListener() { 

    @Override 
    public void onShow(DialogInterface dialog) { 
      loadDialogAndDoSomeAction(); 
    } 

    progressDialog.show(); 
});  

Я отклоняя ProgressDialog в Alertdialog.onShow() в loadDialogAndDoSomeAction()

0

в пользовательском адаптере вы можете переопределить

public boolean areAllItemsEnabled(); 

просто держать логическое значение в качестве члена для адаптера, и при нажатии на него изменить его ложь.

+0

выглядит как подход, который мне нужен, но не работает как-то. Когда вызывается onClick, и я устанавливаю 'allItemsEnabled' на ** false **, кнопки все еще доступны для просмотра во второй раз, прежде чем появится диалоговое окно –

+0

да. Фактически документация упоминает его. Вы пытаетесь вызвать notifyDataSetChanged в экземпляре адаптера после того, как вы установили значение в false? – Blackbelt

+0

no wait, он должен отключить все элементы, когда этот метод возвращает false. Вы не должны это проверять. Можете ли вы изменить свой вопрос и добавить соответствующий код? – Blackbelt

0

Dialog имеет OnShowListener. Вы можете реализовать это на своем AlertDialog. Затем отпустите свой ProgressDialog и сделайте свой Views доступным для повторного просмотра или что вам нужно.

myAlert.setOnShowListener(new OnShowListener() 
{ 
    @Override 
    public void onShow(DialogInterface Dialog) 
    { 
     progressDialog.dismiss(); 
     // here you can make things clickable, etc... 
    } 
}): 

onShow Docs

Вы хотите сделать свою переменную-член ProgressDialog, так что вы можете получить доступ к нему в onClick() и в onShow().

+0

Спасибо, я собираюсь использовать этого слушателя. Но это не решает проблему **, показывающую ** прогресс в диалоге –

Смежные вопросы