Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android CursorAdapter不想更新_Android_Android Cursoradapter_Android Loadermanager - Fatal编程技术网

Android CursorAdapter不想更新

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;

我可以从游标中删除,函数可以工作,但是游标适配器不会在notifyDataSetChanged()上更新,有人知道吗???目前查看更改的唯一方法是退出应用程序并再次运行

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发布代码吗?