SORU
24 AĞUSTOS 2011, ÇARŞAMBA


Kullanım ContentProvider olmadan CursorLoader

Android SDK belgelerine startManagingCursor() yöntem depracated olduğunu söylüyor:

Bu yöntem önerilmiyor. LoaderManager ile yeni CursorLoader sınıfı yerine kullanın; bu da Android Uyumluluk Paketi sayesinde büyük platformlarda mevcuttur. Bu yöntem, faaliyet, aktivite yaşam döngüsü dayalı verilen İmleç yaşam döngüsü yönetimi dikkat çekmek için izin verir. Aktivite otomatik olarak devre dışı bırakmak arayacak durdurulduğunda, () yeniden sorgulamak çağırır yeniden başlatılmasından sonra verilen İmleç (). Aktivite yok olduğunda, tüm yönetilen İmleçler otomatik olarak kapanacaktır. Eğer PETEK ya da geç hedef alan, yerine LoaderManager kullanabilirsiniz, getLoaderManager üzerinden ulaşılabilir()

CursorLoader kullanmak istiyorum. Ama nasıl özel ile kullanım CursorAdapter CursorLoader yapıcı URİ ben gerektiğinde ContentProvider olmadan yapabilir miyim?

CEVAP
14 EYLÜL 2011, ÇARŞAMBA


İçerik sağlayıcı gerekmez simple CursorLoader yazdı:

import android.content.Context;
import android.database.Cursor;
import android.support.v4.content.AsyncTaskLoader;

/**
 * Used to write apps that run on platforms prior to Android 3.0. When running
 * on Android 3.0 or above, this implementation is still used; it does not try
 * to switch to the framework's implementation. See the framework SDK
 * documentation for a class overview.
 *
 * This was based on the CursorLoader class
 */
public abstract class SimpleCursorLoader extends AsyncTaskLoader<Cursor> {
    private Cursor mCursor;

    public SimpleCursorLoader(Context context) {
        super(context);
    }

    /* Runs on a worker thread */
    @Override
    public abstract Cursor loadInBackground();

    /* Runs on the UI thread */
    @Override
    public void deliverResult(Cursor cursor) {
        if (isReset()) {
            // An async query came in while the loader is stopped
            if (cursor != null) {
                cursor.close();
            }
            return;
        }
        Cursor oldCursor = mCursor;
        mCursor = cursor;

        if (isStarted()) {
            super.deliverResult(cursor);
        }

        if (oldCursor != null && oldCursor != cursor && !oldCursor.isClosed()) {
            oldCursor.close();
        }
    }

    /**
     * Starts an asynchronous load of the contacts list data. When the result is ready the callbacks
     * will be called on the UI thread. If a previous load has been completed and is still valid
     * the result may be passed to the callbacks immediately.
     * <p/>
     * Must be called from the UI thread
     */
    @Override
    protected void onStartLoading() {
        if (mCursor != null) {
            deliverResult(mCursor);
        }
        if (takeContentChanged() || mCursor == null) {
            forceLoad();
        }
    }

    /**
     * Must be called from the UI thread
     */
    @Override
    protected void onStopLoading() {
        // Attempt to cancel the current load task if possible.
        cancelLoad();
    }

    @Override
    public void onCanceled(Cursor cursor) {
        if (cursor != null && !cursor.isClosed()) {
            cursor.close();
        }
    }

    @Override
    protected void onReset() {
        super.onReset();

        // Ensure the loader is stopped
        onStopLoading();

        if (mCursor != null && !mCursor.isClosed()) {
            mCursor.close();
        }
        mCursor = null;
    }
}

Sadece AsyncTaskLoader sınıfa ihtiyacı var. Ya Android bir 3.0 veya daha yüksek, ya da Uyumluluk Paketi ile birlikte gelen bir.

Ben de LoadManager ile uyumlu olan 12 ** java.util.List genel bir koleksiyon almak için kullanılır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Fraser Raft

    Fraser Raft

    9 Mart 2010
  • parlophone

    parlophone

    28 ŞUBAT 2006
  • UsherVEVO

    UsherVEVO

    15 EKİM 2009