タブのためのフラグメントを含むタブアクティビティがあります。タブの1つにSQLiteデータベーステーブル(またはテーブルが空の場合は別のフラグメント)からのデータのリストが表示されます。 Tabsアクティビティは、最初にタブを作成するときに、そのテーブルにデータが含まれているかどうかを確認します。存在する場合、リストFragmentを初期化しますが、CursorAdapterは設定しません。 CursorAdapterは、SQLiteデータベースと中央データベースを同期させ、カーソルとCursorAdapterを作成するAsyncTaskによって初期化されます。 List Fragmentは、AsyncTaskがCursorAdapterを作成するのを待っている間にProgressDialogを表示します。 CurserAdapterが初期化されると、ProgressDialogは終了しますが、notifyDataSetChanged()の呼び出しにもかかわらず、ListViewは '空のリスト'ビューのままです。私がタブを切り替えて戻った場合、ListViewはデータを正しく表示します。 CursorAdapterが初期化された後、どのようにListViewの更新を行うことができますか?コードのCursorAdapterを初期化した後にリストビューを更新します
関連ビット:
タブ:
private static ImageCursorAdapter friendCursorAdapter = null;
public static ImageCursorAdapter getFriendsListAdapter() {
return friendCursorAdapter;
}
public static void setFriendsListAdapter(ImageCursorAdapter adapter) {
friendCursorAdapter = adapter;
friendCursorAdapter.notifyDataSetChanged();
}
SyncTask:
protected Void doInBackground(Void... params) {
sql = "SELECT COUNT(*) FROM " + WhereWolfOpenHelper.FRIEND_TABLE_NAME;
statement = db.compileStatement(sql);
count = statement.simpleQueryForLong();
if(count>0) {
friendCursor = db.query(WhereWolfOpenHelper.FRIEND_TABLE_NAME, null, null, null, null, null, WhereWolfOpenHelper.FRIEND_FIRST_NAME_COLUMN+", "+WhereWolfOpenHelper.FRIEND_LAST_NAME_COLUMN);
}
statement.close();
}
@Override
protected void onPostExecute(Void param) {
if(friendCursor!=null) {
ImageCursorAdapter adapter = new ImageCursorAdapter(WhereWolfActivity.this, friendCursor, 0, ImageCursorAdapter.FRIENDS);
Tabs.setFriendsListAdapter(adapter);
}
}
FriendsList:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setListAdapter(Tabs.getFriendsListAdapter());
}
@Override
public void onStart() {
super.onStart();
if(Tabs.getFriendsListAdapter()==null) {
final ProgressDialog dialog = ProgressDialog.show(getActivity(), getString(R.string.loadingtitle), getString(R.string.loading), true, false);
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
while(Tabs.getFriendsListAdapter()==null) {}
dialog.dismiss();
Tabs.getFriendsListAdapter().notifyDataSetChanged();
}
});
thread.start();
}
}
こんにちは。申し訳ありませんが私はそのビットを逃した。 FriendsListコードに追加しました。私はCursorLoaderの使用を検討しましたが、プライベートデータベースなのでContentProviderとしてデータベースを設定していません。 – Pikaling
これで問題は解決しましたか?ところで、あなたは簡単にあなたのカスタムデータベースをサポートするローダーを書くことができます。 CursorLoaderのソースコードをコピーし、ContentProviderの部分を独自の実装に置き換えてください。ここにサンプルがあります:http://code.google.com/p/wwwjdic/source/browse/branches/2.0/wwwjdic/src/org/nick/wwwjdic/history/HistoryLoaderBase.java –
いいえ、私はしませんでした。私はローダーを探し始めましたが、それは解決策かもしれませんが、私は現在彼らに混乱しています:-) – Pikaling