いくつかの項目を持つ alertDialog があります。項目が選択されると、いくつかの Web サービス呼び出しがあり、それらが完了したときにのみダイアログが閉じます。ユーザーに、待つ必要があることを知らせたいと思います。
プログレスバーとトーストを使ってみました。トースト バージョンでは、トーストを表示するだけで表示されますが、ダイアログが閉じられた後にのみ表示されます。
また、Toast を別のスレッドで実行しようとしたところ、アプリケーションがクラッシュしました。
コードの例を次に示します。
private void chooseFromClosestSamplePoints(final ArrayList<Place> places) {
if (null != places) {
final String[] items = new String[places.size()];
for (int i = 0; i < places.size(); i++) {
Place place = places.get(i);
String displayText = place.mfactoryName + "," + place.msamplePointName;
items[i] = displayText;
}
AlertDialog.Builder builder = new AlertDialog.Builder(
Main.this);
builder.setTitle(R.string.select_sample_point);
builder.setItems(items,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
Place place = places.get(which);
Toast toast = Toast.makeText(getApplicationContext(), "אנא המתן", Toast.LENGTH_LONG);
toast.show();
boolean res = selectPlace(place); //this is the long running WS call
if(!res)
{
mStartButton.setEnabled(false);
showAlert("שגיאה","אנא הגדר מחדש עיר מפעל ונקודת דיגום", false);
}
}
});
builder.show();
}
}
編集: SelectPlace メソッド内には、次のように UI スレッド自体で実行されるコードがいくつかあります。
private boolean selectPlace(Place place){
GetFactories factoryMethod = new GetFactories(mApp, selectedCity);
factoryMethod.call(); //This calls the WS and awaits results
final ArrayList<Factory> factories =factoryMethod.getFactories();
Factory selectedFactory = null;
for(int i = 0; i < factories.size(); i++)
{
///Some logic
}
//Some more logic...
}
助けていただければ幸いです。ありがとう、
オマー