Loadmanager onLoadFinished not called

I am trying to load data from the database with the LoaderCallBacks. But the onLoadFinished function from the loadercallbacks will not be called. So as you can see in the log there is a rowcount of 1 that is returned but the list shows no entry also the onLoadFinished is not called as you can see.

SerieFragment


    public class SerieFragment extends SherlockListFragment implements
            LoaderCallbacks {

        private SimpleCursorAdapter adapter;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

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

            Log.i("LoaderManager", "Starting...");
            getLoaderManager().initLoader(0, null, this);

            adapter = new SimpleCursorAdapter(getActivity(),
                    R.layout.serie_list_item, null, from, to, 0);

            this.setListAdapter(adapter);
        }

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

        }

        @Override
        public Loader onCreateLoader(int id, Bundle args) {
            Log.i("LoaderManager", "Creating loader...");

            String[] projection = { DBContract.Episodes._ID,
                    DBContract.Episodes.NAME };
            CursorLoader cursorLoader = new CursorLoader(this.getActivity(),
                    Uri.parse(SerieProvider.CONTENT_URI + "/episodes"), projection,
                    null, null, null);
            return cursorLoader;
        }

        @Override
        public void onLoadFinished(Loader loader, Cursor cursor) {
            Log.i("LoaderManager",
                    "Finished load entry... - Cursor: " + cursor.getCount());
            adapter.swapCursor(cursor);
        }

        @Override
        public void onLoaderReset(Loader loader) {
            Log.i("LoaderManager", "Resetting loader...");
            adapter.swapCursor(null);
        }

Contentprovider


    public class SerieProvider extends ContentProvider {

        private static DatabaseHelper database;
        private static final String PROVIDER = "com.drizzlyday.apps.episotron.providers";
        private static final String BASE_PATH = "serieprovider";
        public static final Uri CONTENT_URI = Uri.parse("content://" + PROVIDER
                + "/" + BASE_PATH);

        public static final int SERIES = 1;
        public static final int EPISODES = 2;

        private static final UriMatcher uriMatcher;
        static {
            uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
            uriMatcher.addURI(PROVIDER, BASE_PATH, SERIES);
            uriMatcher.addURI(PROVIDER, BASE_PATH + "/episodes", EPISODES);
        }

        @Override
        public boolean onCreate() {
            database = new DatabaseHelper(getContext());
            return false;
        }

        @Override
        public int delete(Uri uri, String selection, String[] selectionArgs) {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public String getType(Uri uri) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public Uri insert(Uri uri, ContentValues values) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public Cursor query(Uri uri, String[] projection, String selection,
                String[] selectionArgs, String sortOrder) {

            Log.d("Provider", uri.toString());
            SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();

            int uriType = uriMatcher.match(uri);
            switch (uriType) {
            case SERIES:
                Log.d("Provider", "Series");
                queryBuilder.setTables(DBContract.Series.TABLE_NAME);
                break;
            case EPISODES:
                Log.d("Provider", "Episodes");
                queryBuilder.setTables(DBContract.Episodes.TABLE_NAME);
                break;
            default:
                throw new IllegalArgumentException("Unknown URI: " + uri);
            }

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

            Log.d("Provider", "Cursor: " + cursor.toString()
                    + " - Columncount: " + cursor.getColumnCount()
                    + " - Rowcount: " + cursor.getCount());

            return cursor;
        }

        @Override
        public int update(Uri uri, ContentValues values, String selection,
                String[] selectionArgs) {
            // TODO Auto-generated method stub
            return 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

I found the problem. Had to add following line to refresh the drawable state of the list:

this.getListView().refreshDrawableState();
链接地址: http://www.djcxy.com/p/5490.html

上一篇: 我如何从对象中移除装饰器?

下一篇: loadmanager onLoadFinished未被调用