Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Android, SQLite veritabanı sorgusundan verileri görüntülemek için özel olarak bağdaştırıcı sınıfları sağlar:
SimpleCursorAdapter – Alt sınıflama olmadan kullanılabildiğinden, öğesine ArrayAdapter benzer. Oluşturucuda gerekli parametreleri (imleç ve düzen bilgileri gibi) sağlamanız ve ardından öğesine atamanız yeterlidir ListView.
CursorAdapter : Veri değerlerinin düzen denetimlerine bağlanması (örneğin, denetimleri gizleme/gösterme veya özelliklerini değiştirme) üzerinde daha fazla denetime ihtiyacınız olduğunda devralabileceğiniz bir temel sınıf.
İmleç bağdaştırıcıları, SQLite'te depolanan uzun veri listelerinde gezinmek için yüksek performanslı bir yol sağlar. Tüketen kod nesnede Cursor bir SQL sorgusu tanımlamalı ve sonra her satır için görünümlerin nasıl oluşturulup doldurulacağını açıklamalıdır.
SQLite Veritabanı Oluşturma
İmleç bağdaştırıcılarını göstermek için basit bir SQLite veritabanı uygulaması gerekir. SimpleCursorTableAdapter/VegetableDatabase.cs içindeki kod, tablo oluşturmak ve bunu bazı verilerle doldurmak için kodu ve SQL'i içerir.
Sınıfın tamamı VegetableDatabase burada gösterilmiştir:
class VegetableDatabase : SQLiteOpenHelper {
public static readonly string create_table_sql =
"CREATE TABLE [vegetables] ([_id] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, [name] TEXT NOT NULL UNIQUE)";
public static readonly string DatabaseName = "vegetables.db";
public static readonly int DatabaseVersion = 1;
public VegetableDatabase(Context context) : base(context, DatabaseName, null, DatabaseVersion) { }
public override void OnCreate(SQLiteDatabase db)
{
db.ExecSQL(create_table_sql);
// seed with data
db.ExecSQL("INSERT INTO vegetables (name) VALUES ('Vegetables')");
db.ExecSQL("INSERT INTO vegetables (name) VALUES ('Fruits')");
db.ExecSQL("INSERT INTO vegetables (name) VALUES ('Flower Buds')");
db.ExecSQL("INSERT INTO vegetables (name) VALUES ('Legumes')");
db.ExecSQL("INSERT INTO vegetables (name) VALUES ('Bulbs')");
db.ExecSQL("INSERT INTO vegetables (name) VALUES ('Tubers')");
}
public override void OnUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{ // not required until second version :)
throw new NotImplementedException();
}
}
VegetableDatabase sınıfı, etkinliğin OnCreate yönteminde HomeScreen örneği oluşturulur. SQLiteOpenHelper Temel sınıf, veritabanı dosyasının kurulumunu yönetir ve yöntemindeki SQL'in yalnızca bir kez çalıştırılmasını OnCreate sağlar. Bu sınıf ve için SimpleCursorAdapter CursorAdapteraşağıdaki iki örnekte kullanılır.
İmleç sorgusunun çalışması için CursorAdapter bir tamsayı sütunu _id olmalıdır. Temel alınan tabloda adlı _id bir tamsayı sütunu yoksa, imleci oluşturan içindeki RawQuery başka bir benzersiz tamsayı için bir sütun diğer adı kullanın. Daha fazla bilgi için Android belgelerine bakın.
İmleç Oluşturma
Örneklerde, RawQuery SQL sorgusunu nesneye dönüştürmek için bir Cursor kullanılır. İmleçten döndürülen sütun listesi, imleç bağdaştırıcısında görüntülenebilen veri sütunlarını tanımlar. SimpleCursorTableAdapter/HomeScreen.cs OnCreate yönteminde veritabanını oluşturan kod burada gösterilmiştir:
vdb = new VegetableDatabase(this);
cursor = vdb.ReadableDatabase.RawQuery("SELECT * FROM vegetables", null); // cursor query
StartManagingCursor(cursor);
// use either SimpleCursorAdapter or CursorAdapter subclass here!
Çağıran StartManagingCursor tüm kodlar da çağrısı StopManagingCursoryapmalıdır. Örnekler, imleci başlatmak ve OnDestroy kapatmak için kullanılırOnCreate. OnDestroy yöntemi şu kodu içerir:
StopManagingCursor(cursor);
cursor.Close();
Bir uygulamanın kullanılabilir bir SQLite veritabanı olduğunda ve gösterildiği gibi bir imleç nesnesi oluşturduktan sonra, içindeki satırları ListViewgörüntülemek için bir SimpleCursorAdapter veya alt sınıfını CusorAdapter kullanabilir.
SimpleCursorAdapter kullanma
SimpleCursorAdapter gibi ArrayAdapterancak SQLite ile kullanım için özeldir. Alt sınıflama gerektirmez; yalnızca nesneyi oluştururken bazı basit parametreler ayarlayın ve sonra bunu bir ListView's özelliğine atayın Adapter .
SimpleCursorAdapter oluşturucusunun parametreleri şunlardır:
Bağlam : İçeren Etkinliğin başvurusu.
Düzen : Kullanılacak satır görünümünün kaynak kimliği.
ICursor : Görüntülenecek verilerin SQLite sorgusunu içeren bir imleç.
Dize dizisinden : İmleçteki sütunların adlarına karşılık gelen dize dizisi.
Tamsayı dizisi : Satır düzenindeki denetimlere karşılık gelen düzen kimlikleri dizisi. Dizide from belirtilen sütunun değeri, aynı dizinde bu dizide belirtilen ControlID'ye bağlanacaktır.
from veri kaynağından görünümdeki düzen denetimlerine eşleme oluşturduğundan ve to dizileri aynı sayıda girdiye sahip olmalıdır.
SimpleCursorTableAdapter/HomeScreen.cs örnek kodu şuna benzer:SimpleCursorAdapter
// which columns map to which layout controls
string[] fromColumns = new string[] {"name"};
int[] toControlIDs = new int[] {Android.Resource.Id.Text1};
// use a SimpleCursorAdapter
listView.Adapter = new SimpleCursorAdapter (this, Android.Resource.Layout.SimpleListItem1, cursor,
fromColumns,
toControlIDs);
SimpleCursorAdapter , SQLite verilerini bir içinde görüntülemenin hızlı ve basit bir ListViewyoludur. Ana sınırlama, yalnızca denetimleri görüntülemek için sütun değerlerini bağlayabilmesidir; satır düzeninin diğer yönlerini değiştirmenize izin vermez (örneğin, denetimleri gösterme/gizleme veya özellikleri değiştirme).
CursorAdapter Alt Sınıflama
Bir CursorAdapter alt sınıf, SQLite'ten verileri görüntülemeyle aynı performans avantajlarına SimpleCursorAdapter sahiptir, ancak aynı zamanda her satır görünümünün oluşturulması ve düzeni üzerinde tam denetim sağlar. UygulamaCursorAdapter, , GetItemIdCount veya this[] dizin oluşturucuyu geçersiz kılmadığından GetViewalt sınıflamadan BaseAdapter çok farklıdır.
Çalışan bir SQLite veritabanı göz önünde bulundurulduğunda, alt sınıf oluşturmak CursorAdapter için yalnızca iki yöntemi geçersiz kılmanız gerekir:
BindView : Bir görünüm verilip verileri sağlanan imleçte görüntüleyecek şekilde güncelleştirin.
NewView : öğesinin
ListViewgörüntülenmesi için yeni bir görünüm gerektiğinde çağrılır. ,CursorAdaptergeri dönüşüm görünümlerini (normal Bağdaştırıcılardaki yönteminGetViewaksine) halleder.
Önceki örneklerdeki bağdaştırıcı alt sınıflarında satır sayısını döndürmek ve geçerli öğeyi almak için yöntemler vardır; CursorAdapter bu bilgiler imlecin kendisinden dolaşabileceği için bu yöntemleri gerektirmez. Her görünümün oluşturulmasını ve popülasyonunu bu iki yönteme bölerek görünümün CursorAdapter yeniden kullanılmasını zorlar. Bu, yöntemin parametresini yoksayabileceğiniz convertView normal bir bağdaştırıcının BaseAdapter.GetView aksinedir.
CursorAdapter Uygulama
CursorTableAdapter/HomeScreenCursorAdapter.cs içindeki kod bir CursorAdapter alt sınıf içerir. yönteminde öğesine erişebilmesi için oluşturucuya geçirilen bir LayoutInflater bağlam başvuruyu NewView depolar. Sınıfın tamamı şöyle görünür:
public class HomeScreenCursorAdapter : CursorAdapter {
Activity context;
public HomeScreenCursorAdapter(Activity context, ICursor c)
: base(context, c)
{
this.context = context;
}
public override void BindView(View view, Context context, ICursor cursor)
{
var textView = view.FindViewById<TextView>(Android.Resource.Id.Text1);
textView.Text = cursor.GetString(1); // 'name' is column 1 in the cursor query
}
public override View NewView(Context context, ICursor cursor, ViewGroup parent)
{
return this.context.LayoutInflater.Inflate(Android.Resource.Layout.SimpleListItem1, parent, false);
}
}
CursorAdapter'i Atama
Activity içinde öğesini görüntülerken ListViewimleci oluşturun ve CursorAdapter liste görünümüne atayın.
CursorTableAdapter/HomeScreen.cs OnCreate yönteminde bu eylemi gerçekleştiren kod burada gösterilmiştir:
// create the cursor
vdb = new VegetableDatabase(this);
cursor = vdb.ReadableDatabase.RawQuery("SELECT * FROM vegetables", null);
StartManagingCursor(cursor);
// create the CursorAdapter
listView.Adapter = (IListAdapter)new HomeScreenCursorAdapter(this, cursor, false);
yöntemi, OnDestroy daha önce açıklanan yöntem çağrısını StopManagingCursor içerir.