Loadmanager onLoadFinished未调用

kev*_*oos 5 sqlite android

我正在尝试使用LoaderCallBacks从数据库加载数据。但是不会调用loadercallbacks中的onLoadFinished函数。因此,您可以在日志中看到返回的行数为1,但是列表中没有显示任何条目,因此您也可以看到未调用onLoadFinished。

SerieFragment

    公共类SerieFragment扩展了SherlockListFragment实现
            LoaderCallbacks {

        私有SimpleCursorAdapter适配器;

        @Override
        公共无效onCreate(捆绑保存的InstanceState){
            super.onCreate(savedInstanceState);

            String [] from = new String [] {DBContract.Episodes.NAME};
            int [] to = new int [] {R.id.name};

            Log.i(“ LoaderManager”,“正在启动...”);
            getLoaderManager()。initLoader(0,null,this);

            adapter = new SimpleCursorAdapter(getActivity(),
                    R.layout.serie_list_item,null,从,到0);

            this.setListAdapter(adapter);
        }

        @Override
        public void onViewCreated(View view,Bundle savedInstanceState)捆绑{

        }

        @Override
        公共加载程序onCreateLoader(int id,Bundle args){
            Log.i(“ LoaderManager”,“正在创建加载程序...”);

            String [] projection = {DBContract.Episodes._ID,
                    DBContract.Episodes.NAME};
            CursorLoader cursorLoader = new CursorLoader(this.getActivity(),
                    Uri.parse(SerieProvider.CONTENT_URI +“ / episodes”),投影,
                    null,null,null);
            返回cursorLoader;
        }

        @Override
        public void onLoadFinished(加载程序加载程序,游标光标){
            Log.i(“ LoaderManager”,
                    “完成的加载项...-光标:” + cursor.getCount());
            adapter.swapCursor(cursor);
        }

        @Override
        public void onLoaderReset(Loader loader){
            Log.i(“ LoaderManager”,“正在重置加载程序...”);
            adapter.swapCursor(null);
        }

内容提供商

    公共类SerieProvider扩展ContentProvider {

        私有静态DatabaseHelper数据库;
        私有静态最终字符串PROVIDER =“ com.drizzlyday.apps.episotron.providers”;
        私有静态最终字符串BASE_PATH =“ serieprovider”;
        公共静态最终Uri CONTENT_URI = Uri.parse(“ content://” + PROVIDER
                +“ /” + BASE_PATH);

        public static final int SERIES = 1;
        公共静态最终诠释EPISODES = 2;

        私有静态最终UriMatcher uriMatcher;
        静态的 {
            uriMatcher =新的UriMatcher(UriMatcher.NO_MATCH);
            uriMatcher.addURI(PROVIDER,BASE_PATH,SERIES);
            uriMatcher.addURI(PROVIDER,BASE_PATH +“ / episodes”,EPISODES);
        }

        @Override
        公共布尔onCreate(){
            database =新的DatabaseHelper(getContext());
            返回false;
        }

        @Override
        public int delete(Uri uri,字符串选择,字符串[] selectionArgs){
            // TODO自动生成的方法存根
            返回0;
        }

        @Override
        public String getType(Uri uri){
            // TODO自动生成的方法存根
            返回null;
        }

        @Override
        公共Uri插入(Uri uri,ContentValues值){
            // TODO自动生成的方法存根
            返回null;
        }

        @Override
        公共游标查询(Uri uri,String []投影,字符串选择,
                String [] selectionArgs,String sortOrder){

            Log.d(“ Provider”,uri.toString());
            SQLiteQueryBuilder queryBuilder =新的SQLiteQueryBuilder();

            int uriType = uriMatcher.match(uri);
            开关(uriType){
            案例系列:
                Log.d(“ Provider”,“ Series”);
                queryBuilder.setTables(DBContract.Series.TABLE_NAME);
                打破;
            案例集:
                Log.d(“ Provider”,“情节”);
                queryBuilder.setTables(DBContract.Episodes.TABLE_NAME);
                打破;
            默认:
                抛出新的IllegalArgumentException(“未知URI:” + uri);
            }

            SQLiteDatabase db = database.getReadableDatabase();
            SQLiteCursor游标=(SQLiteCursor)queryBuilder.query(db,projection,
                    selection,selectionArgs,null,null,sortOrder);
            cursor.setNotificationUri(getContext()。getContentResolver(),uri);

            Log.d(“ Provider”,“ Cursor:” + cursor.toString()
                    +“-Columncount:” + cursor.getColumnCount()
                    +“-行数:” + cursor.getCount());

            返回光标;
        }

        @Override
        public int update(Uri uri,ContentValues values,字符串选择,
                String [] selectionArgs){
            // TODO自动生成的方法存根
            返回0;
        }

05-05 23:34:30.855: I/ActivityThread(31903): Pub com.drizzlyday.apps.episotron.providers: com.drizzlyday.apps.episotron.providers.SerieProvider
05-05 23:34:31.035: D/Serie(31903): New Serie fragment
05-05 23:34:31.040: I/LoaderManager(31903): Starting...
05-05 23:34:31.040: I/LoaderManager(31903): Creating loader...
05-05 23:34:31.055: D/AbsListView(31903): Get MotionRecognitionManager
05-05 23:34:31.060: D/AbsListView(31903): Get MotionRecognitionManager
05-05 23:34:31.080: D/dalvikvm(31903): GC_CONCURRENT freed 174K, 8% free 12340K/13383K, paused 2ms+2ms, total 16ms
05-05 23:34:31.090: D/Provider(31903): content://com.drizzlyday.apps.episotron.providers/serieprovider/episodes
05-05 23:34:31.090: D/Provider(31903): Episodes
05-05 23:34:31.100: V/SlidingMenu(31903): setting padding!
05-05 23:34:31.160: D/libEGL(31903): loaded /system/lib/egl/libEGL_mali.so
05-05 23:34:31.175: D/libEGL(31903): loaded /system/lib/egl/libGLESv1_CM_mali.so
05-05 23:34:31.175: D/libEGL(31903): loaded /system/lib/egl/libGLESv2_mali.so
05-05 23:34:31.180: D/(31903): Device driver API match
05-05 23:34:31.180: D/(31903): Device driver API version: 10
05-05 23:34:31.180: D/(31903): User space API version: 10 
05-05 23:34:31.180: D/(31903): mali: REVISION=Linux-r2p4-02rel0 BUILD_DATE=Tue Oct 16 15:37:13 KST 2012 
05-05 23:34:31.210: D/OpenGLRenderer(31903): Enabling debug mode 0
05-05 23:34:31.215: V/CustomViewBehind(31903): behind INVISIBLE
05-05 23:34:31.260: D/Provider(31903): Cursor: android.database.sqlite.SQLiteCursor@41b0df88 - Columncount: 2 - Rowcount: 1
Run Code Online (Sandbox Code Playgroud)

kev*_*oos 2

我发现了问题。必须添加以下行来刷新列表的可绘制状态:

this.getListView().refreshDrawableState();
Run Code Online (Sandbox Code Playgroud)