1

我想用来CursorLoaders从数据库中加载日期,但问题是我不想处理 CursorAdapter 或者它倒出我想要保持Cursor原样。

这就是我所做的

class MyClass implements LoaderCallbacks<Cursor> { 

Cursor mCursor;
...
...
...


@Override
    public Loader<Cursor> onCreateLoader(int id, Bundle bundle) {
        if (type == V_TYPE_PART) {
            // load all parts
            return new CursorLoader(getActivity(),
                    PartTableMetaData.CONTENT_URI,
                    PartTableMetaData.TABLE_COLUMNS, null, null,
                    PartTableMetaData._ID + " ASC");
        } 
        return null;
    }

    @Override
    public void onLoadFinished(Loader<Cursor> arg0, Cursor arg1) {

        counterPartCursor = arg1;
                //update the UI


    }

    @Override
    public void onLoaderReset(Loader<Cursor> arg0) {

        mCursor= null;

    }
}

现在这项工作正常。我的问题是我做对了吗?还是我应该做一些其他的事情,比如在onLoaderReset??中关闭光标?

4

1 回答 1

2

不需要关闭游标。设置 null 将使事情正常工作,因为 CursorLoader 将负责关闭它。但是我可以看到您当前代码中的泄漏为

@Override
public void onLoadFinished(Loader<Cursor> arg0, Cursor arg1) {

    counterPartCursor = arg1;
            //update the UI


}

@Override
public void onLoaderReset(Loader<Cursor> arg0) {

    mCursor= null;

}

您在 counterPartCursor 中持有引用并使 mCursor 为空!

于 2013-10-01T05:56:27.320 回答