スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ProgressDialogで処理待ち後にListViewを描画する

「SQLiteなどでテーブルからデータを読み込み、その間「読み込み中」みたいな処理待ちダイアログを出し、結果が出たらダイアログを閉じてListViewに反映させる」なんて処理。
簡単そうではまってしまったのでメモ。
読み込み中のダイアログボックスを触る時、別スレッドで処理を行うが、この別スレッドではUIの更新ができなくて、そこにはまった。
解決策は、ダイアログを消すハンドラーにUI描画処理を書くこと。

OnCreateでダイアログボックスを表示

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

//-- プログレスダイアログボックスの表示 --//
dlg_loading = new ProgressDialog(this);
dlg_loading.setTitle("読み込み中");
dlg_loading.setMessage("Now Loading...");
dlg_loading.setProgressStyle(ProgressDialog.STYLE_SPINNER);
dlg_loading.show();

//-- 別スレッドで処理 --//
Thread thread = new Thread(new pgs());
thread.start();
}



別スレッド:「読み込み中」を表示中の処理
処理が終わったら、ハンドラを呼び出してダイアログを閉じ、ListViewを描画します。

private class pgs implements Runnable {

public void run() {
//--させたい処理処理

//-- 読み込み終了の通知 --//
handler.sendEmptyMessage(0);
}
}



ハンドラー

private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
//-- ダイアログを閉じる --//
dlg_loading.dismiss();

//-- ミソ!ココにUIに関する処理を書く(ListViewの更新とか) --//
ArrayAdapter<String> adapter = new ArrayAdapter<String>([呼び出し元のアクティビティクラス名].this, android.R.layout.simple_list_item_1) ;
ListView listView = (ListView)findViewById(R.id.***);
listView.setAdapter(adapater);
}
};



Keyword
読込中 読み込み中 更新中 wait sleep
スポンサーサイト

トラックバック

コメント

コメントを残す

Secret



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。