データベースを使用していて、カーソルアダプタを使用してローダー内のデータベースを照会すると、リストフラグメントがあります。 ユーザーがリストビューアイテムを長く押すと、コンテキストメニューが表示され、このエントリを削除するオプションが表示されます。 deleteを押すと、このエントリを削除するスレッドを開始してから、ローダーを再起動して新しいカーソルを取得します(「requery()」は非推奨です)。 ローダーが新しいカーソルを読み込むのを終えたときに、リストビューをリフレッシュすると思われるchangeCursor
メソッドを使用しようとしていますが、それはしません。したがって、notifyDataSetChanged
を試しましたが、それも機能しません。 私はチェックして、カーソルがローダーから戻ってきてカーソルを変更しますが、リストビューは更新されません。アダプタでchangeCursor()を使用した後にリストビューが更新されない
どうすればよいですか?フラグメントを再起動しますか?ここで
は、いくつかのコードです:
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();
}
}
感謝を!
カーソルを更新するには 'cursor.requery()'を呼び出していますか? –
いいえ、カーソル。これはドキュメントに書かれているので、私はchangeCursor()を使用しています。 – Elad92