Mobil Programlama

Android

Sonuçları Kullanmak

Lisans: Creative Commons 26.11.2020 tarihinde güncellendi
Bakabileceğiniz Etiketler: Eğitmen: Geleceği Yazanlar Ekibi

Bir önceki eğitim içeriğinde de gördüğünüz gibi verilerinizi, yazdığınız onCreateLoader() metodunda, CursorLoader kullanarak yüklemelisiniz. "Loader", Activity veya FragmentActivity'nize sağlayacağı sonuçları LoaderCallbacks.onLoadFinished() metodunda yazdığınız kod sayesinde elde eder. Bu metoda gelen parametrelerden biri olan Cursor, sorgu sonuçlarını içerir. Bu nesneyi kullanarak gösterilecek verilerinizi güncelleyebilir veya işlemek için sonraya saklayabilirsiniz.

onCreateLoader() ve onLoadFinished() metotlarından başka, onLoaderReset() metodunu gerçeklemelisiniz. Cursor'ün ilişkili olduğu veri değiştiğinde bu durum CursorLoader tarafından fark edilir ve bu metod çağırılır. Veri değiştiğinde geliştirme çatısı (framework), geçerli sorguyu tekrar çalıştıracaktır.

 

Sorgu sonuçlarını kullanmak

CursorLoader tarafından döndürülen Cursor'u gösterebilmek için AdapterView sınıfını uygulamaya da bir View sınıfı (ListView ya da GridView gibi) kullanmalı ve CursorAdapter'ı gerçekleyen bir adaptör ile View sağlamalısınız. Böyle yaptığınızda sistem, Cursor'dan aldığı verileri otomatik olarak View'a taşıyacaktır.

İsterseniz hiç veri olmadan da View ile adaptör arasında bir ekleme yapabilirsiniz ve ardından onLoadFinished() metodundayken bir Cursor'u Adapter'a taşırsınız. Siz Cursor'u Adapter'a taşır taşımaz, View otomatik olarak sistem tarafından güncelleyecektir. Bu işlem aynı zamanda siz Cursor'un içeriğini değiştirdiğinizde de gerçekleşir.

Bir örnek yapalım:

public String[] mFromColumns = {
    DataProviderContract.IMAGE_PICTURENAME_COLUMN
};

public int[] mToFields = {
    R.id.PictureName
};

// ListView'ı tanımlayalım
ListView mListView = (ListView) findViewById(R.id.dataList);
/*
 * ListView için bir SimpleCursorAdapter tanımlayalım
 *
 */
SimpleCursorAdapter mAdapter =
    new SimpleCursorAdapter(
            this,                // o anki Context
            R.layout.list_item,  // tek satır için layout
            null,                // Henüz Cursor yok
            mFromColumns,        // kullanılacak Cursor sütunları
            mToFields,           // kullanılacak Layout alanları
            0                    // flag yok
    );

// View'ımızın Adapter'ını ayarlayalım
mListView.setAdapter(mAdapter);

...

/*
 * CursorLoader için sorgusunu bitirdiğinde
 * çağıracağı bir callback metodu tanımlayalım
 */

@Override
public void onLoadFinished(Loader loader, Cursor cursor) {

    ...
    
    /*
     * sorgu sonuçlarını adapter'a taşır ve listview
     * bu adapter sayesinde tekrar gösterilir
     */ 
    mAdapter.changeCursor(cursor);
}

 

Eski cursor referanslarını silmek

CursorLoader, ilgili olduğu Cursor'ü geçersiz hale geldiğinde onu sıfırlar. Bu genellikle Cursor ile ilişkili veri değiştiğinde meydana gelir. "Loader" geliştirme çatısı sorguyu yeniden çalıştırmadan önce sizin onLoaderReset() metodundaki gerçeklemenizi çağırır. Bu callback metodundayken, geçerli tüm Cursor referanslarını silerek, bellek sızmalarının önüne geçmelisiniz. Bu işlerin ardından onLoaderReset() biter ve CursorLoader sorguyu yeniden çalıştırır.

Bir örnekle pekiştirelim:

/*
 * CursorLoader sıfırlandığında çağırılır. Örneğin bu metod,
 * veri sağlayıcısındaki veri değiştiğinde ve Cursor atıl
 * duruma geldiğinde çağırılır.
 */
 
@Override
public void onLoaderReset(Loader loader) {
    
    /*
     * Adapter'ın Cursor ile ilgili referenslarını boşaltır.
     * Böylece bellek sızmaları engellenir.
     */
    mAdapter.changeCursor(null);
}

 

Bu sayfadaki parçalar Android Open Source Project kapsamında oluşturulmuş ve paylaşılmış içeriğin küçük değişiklikler yapılmış hâlidir ve Creative Commons 2.5 Attribution License'ta belirlenen koşullara göre kullanılmıştır.

Bu eğitim içeriğinin orijinal hâline buradan ulaşabilirsiniz: Handling the Results