Android CursorAdapter不想更新
我可以从游标中删除,函数可以工作,但是游标适配器不会在notifyDataSetChanged()上更新,有人知道吗???目前查看更改的唯一方法是退出应用程序并再次运行Android CursorAdapter不想更新,android,android-cursoradapter,android-loadermanager,Android,Android Cursoradapter,Android Loadermanager,我可以从游标中删除,函数可以工作,但是游标适配器不会在notifyDataSetChanged()上更新,有人知道吗???目前查看更改的唯一方法是退出应用程序并再次运行 public class DiaryFragment extends Fragment implements LoaderManager.LoaderCallbacks<Cursor>, AdapterView.OnItemClickListener { private GridView mGridView;
public class DiaryFragment extends Fragment implements LoaderManager.LoaderCallbacks<Cursor>, AdapterView.OnItemClickListener {
private GridView mGridView;
private View mEmptyViews;
private TextView mAddNewDiaryEntry;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_diary, container, false);
setHasOptionsMenu(true);
getLoaderManager().initLoader(0, null, this);
mGridView = (GridView) view.findViewById(R.id.gridview);
mGridView.setAdapter(new DiaryAdapter(getActivity()));
mGridView.setOnItemClickListener(this);
return view;
}
@Override
public void onResume() {
super.onResume();
GALogEvent.logScreen(getActivity(), "Diary");
getLoaderManager().restartLoader(0, null, this);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
getActivity().getMenuInflater().inflate(R.menu.diary, menu);
}
private CursorAdapter getAdapter() {
return ((CursorAdapter) mGridView.getAdapter());
}
public static Fragment newInstance() {
return new DiaryFragment();
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
return new CursorLoader(getActivity(),ContentProvider. URI, null, null, null, ContentProvider.DIARY_DATE + " DESC");
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
getAdapter().swapCursor(data);
if (data != null && data.getCount() > 0) {
mGridView.setVisibility(View.VISIBLE);
mEmptyViews.setVisibility(View.GONE);
}
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
getAdapter().swapCursor(null);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
Cursor c = (Cursor) parent.getAdapter().getItem(position);
int diaryEntryId = c.getInt(c.getColumnIndex(ContentProvider.ID));
Intent intent = new Intent(getActivity(), AddDiaryEntryActivity.class);
boolean didSmoke = c.getInt(c.getColumnIndex(ContentProvider.DIARY_DID_SMOKE)) != 0;
intent.putExtra(Constants.DIARY_UPDATE_STATUS, didSmoke);
intent.putExtra(Constants.DIARY_ENTRY, diaryEntryId);
startActivity(intent);
}
private class DiaryAdapter extends CursorAdapter {
private final LayoutInflater mLayoutInflater;
public DiaryAdapter(Context context) {
super(context, null, true);
mLayoutInflater = LayoutInflater.from(context);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return mLayoutInflater.inflate(R.layout.row_diary, parent, false);
}
@Override
public void bindView(View view, Context context, final Cursor cursor) {
final int idCraving = cursor.getInt(cursor.getColumnIndex(ContentProvider.ID));
final ImageView deleteDiaryEntry;
deleteDiaryEntry = (ImageView) view.findViewById(R.id.remove_registry_from_diary);
deleteDiaryEntry.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getActivity().getContentResolver().delete(ContentProvider. URI, " _id = ? ", new String[]{"" + idCraving});
getAdapter().notifyDataSetChanged();
}
});
}
}
}
公共类DiaryFragment扩展片段实现LoaderManager.LoaderCallbacks、AdapterView.OnItemClickListener{
私有网格视图mGridView;
私有视图MemptyView;
私有文本视图mAddNewDiaryEntry;
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图=充气机。充气(R.layout.fragment\u日记,容器,假);
设置选项菜单(真);
getLoaderManager().initLoader(0,null,this);
mGridView=(GridView)view.findviewbyd(R.id.GridView);
setAdapter(新的日记适配器(getActivity());
mGridView.setOnItemClickListener(此);
返回视图;
}
@凌驾
恢复时公开作废(){
super.onResume();
logScreen(getActivity(),“日记”);
getLoaderManager().restartLoader(0,null,this);
}
@凌驾
创建选项菜单(菜单菜单,菜单充气机){
super.onCreateOptions菜单(菜单,充气机);
getActivity().getMenuInflater().充气(右菜单、日记、菜单);
}
私有游标适配器getAdapter(){
返回((CursorAdapter)mGridView.getAdapter());
}
公共静态片段newInstance(){
返回新的日记片段();
}
@凌驾
公共加载器onCreateLoader(int-id,Bundle-args){
返回新的游标装入器(getActivity(),ContentProvider.URI,null,null,ContentProvider.DIARY_DATE+“DESC”);
}
@凌驾
public void onLoadFinished(加载器、光标数据){
getAdapter().swapCursor(数据);
if(data!=null&&data.getCount()>0){
mGridView.setVisibility(View.VISIBLE);
memptyView.setVisibility(View.GONE);
}
}
@凌驾
公共void onLoaderReset(加载器){
getAdapter().swapCursor(null);
}
@凌驾
public void onItemClick(AdapterView父对象、视图、最终整型位置、长id){
游标c=(游标)parent.getAdapter().getItem(位置);
int diaryEntryId=c.getInt(c.getColumnIndex(ContentProvider.ID));
Intent Intent=new Intent(getActivity(),AddDiaryEntryActivity.class);
布尔didSmoke=c.getInt(c.getColumnIndex(ContentProvider.DIARY_DID_SMOKE))!=0;
intent.putExtra(Constants.dialog\u UPDATE\u STATUS,didSmoke);
intent.putExtra(Constants.DIARY_条目,diaryEntryId);
星触觉(意向);
}
私有类日记适配器扩展游标适配器{
私人最终布局平面图mLayoutInflater;
公共日记适配器(上下文){
super(上下文,null,true);
mLayoutInflater=LayoutInflater.from(上下文);
}
@凌驾
公共视图newView(上下文上下文、光标、视图组父对象){
返回mLayoutFlater.充气(R.layout.row_日记,父项,false);
}
@凌驾
公共void bindView(视图视图、上下文上下文、最终光标){
final int-idCraving=cursor.getInt(cursor.getColumnIndex(ContentProvider.ID));
最终图像视图删除日志条目;
deleteDiaryEntry=(ImageView)view.findViewById(R.id.remove\u registry\u from\u dialog);
deleteDiaryEntry.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
getActivity().getContentResolver().delete(ContentProvider.URI,“\u id=?”,新字符串[]{”“+idCraving});
getAdapter().notifyDataSetChanged();
}
});
}
}
}
在ContentProvider的delete()方法中,需要有以下代码行:
getContext().getContentResolver().notifyChange(uri, null);
从官方文档中,此行将通知CursorAdapter对象发生了更改。如果您没有这一行,则只有当代码重新查找数据库时,您才会看到更改。这是在您退出并重新打开应用程序时发生的。您可以从ContentProvider发布代码吗?