私はデータベースを使用していますが、ローダーでデータベースにクエリを実行して取得するカーソルアダプターを使用するリストフラグメントがあります。ユーザーがリストビューアイテムを長押しすると、コンテキストメニューとこのエントリを削除するオプションが表示されます。彼が削除を押すと、このエントリを削除するスレッドを開始し、ローダーを再度開始して新しいカーソルを取得します(「requery()」は非推奨であるため)。ローダーが新しいカーソルのロードを終了したときにchangeCursor
、リストビューを更新することを想定したメソッドを使用しようとしていますが、それが実行されないため、使用してみnotifyDataSetChanged
ましたが、機能しません。チェックしたところ、カーソルがローダーから戻ってきました。カーソルは変更されますが、リストビューが更新されません。
私は何をすべきか?フラグメントを再起動しますか?
ここにいくつかのコードがあります:
case MENU_REMOVE:
final AdapterContextMenuInfo info = (AdapterContextMenuInfo)item.getMenuInfo();
mProgress = ProgressDialog.show(getActivity(), getString(R.string.list_remove_progress_title_text),
getString(R.string.progress_dialog_description));
new Thread(new Runnable() {
@Override
public void run() {
PlacesHandler wph = new PlacesHandler(getActivity());
wph.DeleteEntry(mPlaceName, info.id);
getLoaderManager().initLoader(0, null, ListFragment.this);
}
}).start();
return(true);
ロードが終了したら:
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
if(mProgress == null || !mProgress.isShowing()){
...
}
else{
mProgress.dismiss();
mAdapter.changeCursor(data);
mAdapter.notifyDataSetChanged();
}
}
ありがとう!