私のアプリケーションでは、アプリが何かをしている間に ProgressDialog が表示されます。
mProgressDialog = ProgressDialog.show(
((FriendListActivity) ctx).getParent(), "Please wait...",
"Getting data...", true);
updateDisplay(true);
updateDisplay メソッドでは、次のような処理を行います。
items = new ArrayList<FriendInfo>();
fa = new FriendListAdapter(ctx, R.layout.friendlist_item, items);
setListAdapter(fa);
Thread t = new Thread() {
public void run() {
getFriendList(); //This is where the problem occured
initFriendList();
handler.post(new Runnable() {
public void run() {
mProgressDialog.dismiss();
fa.notifyDataSetChanged();
};
});
}
};
t.start();
ではgetFriendList()
、Facebook ユーザーの情報を取得するために呼び出しを行います。
AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(
facebook);
mAsyncRunner.request("me/friends&fields=name,picture",
new FriendsRequestListener((FriendListActivity) ctx,
currentuser));
その後、ユーザーの情報は私のデータベースに保存されます。initFriendList();
メソッド (以下) は、getFriendList()
そのデータを使用してビューを初期化します。
問題は、initFriendList() が getFriendList() がデータの取得を完了するまで待機することです。しかし、getFriendList()
では AsyncFacebookRunner を使用しているため、initFriendList() はすぐに実行されます。initFriendList() を実行する前に AsyncFacebookRunner が終了するのを待つにはどうすればよいですか。