Hier zeige ich Euch wie man mehrere Spalten einer Datenbank auslesen und
diese in einem eigenen Layout ausgeben lassen kann.
Für dieses Beispiel habe ich ein Layout mit zwei Spalten und zwei Zeilen gewählt.
wobei sich in der ersten Spalte ein Symbol befindet, das je nach ausgelesenem Wert
einer Spalte in der Datenbank ein anderes Symbol anzeigt.
activity "fahrzeuge.java"
Java
@Override
protected void onStart() {
super.onStart();
SQLiteDatabase myDB = null;
try{
myDB = this.openOrCreateDatabase("TankPro2", MODE_PRIVATE, null);
Cursor c = myDB.rawQuery("SELECT _id, name || ', ' || model as bezeichnung, " +
"zuletztgetankt, " +
"nutzungsart " +
"FROM fahrzeuge", null);
startManagingCursor(c);
getListView().setOnCreateContextMenuListener(this);
final SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.fahrzeuge,
c,
new String[] { "_id", "zuletztgetankt", "nutzungsart" },
new int[] { R.id.KfzNameModel, R.id.KfzLastFuel, R.id.ico }
);
adapter.setViewBinder(new ViewBinder()
{
@Override
public boolean setViewValue(View view, Cursor theCursor, int column)
{
switch(view.getId()) {
case R.id.KfzNameModel:
final String ColNameModel = theCursor.getString(1); //Name und Model
((TextView)view).setText(ColNameModel);
return true;
case R.id.KfzLastFuel:
final String ColLastFuel = theCursor.getString(2); //Zuletzt getankt
((TextView)view).setText(Datum(ColLastFuel));
return true;
case R.id.ico:
final int ColVerw = theCursor.getInt(3); //Nutzungsart
if(ColVerw == 0) {
((ImageView)view).setImageResource(R.drawable.privat);
}
else if(ColVerw == 1){
((ImageView)view).setImageResource(R.drawable.beruflich);
}
else if(ColVerw == 2){
((ImageView)view).setImageResource(R.drawable.gemischt);
}
return true;
}
return false;
}
});
this.setListAdapter(adapter);
}finally {
if (myDB != null)
myDB.close();
}
}
Alles anzeigen
Hilfsfunktion die uns ein Datum im SQL-Format in ein Datum in deutscher Schreibweise umwandelt.
Java
private String Datum(String datum){
String result = null;
if(datum!=null){
result = "Zuletzt getankt am: " + datum.substring(8, 10)+"."+datum.substring(5, 7)+"."+datum.substring(0, 4);
}
else {
result="Noch nicht getankt";
}
return(result);
}
fahrzeuge.xml
XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:padding="6dip">
<ImageView
android:id="@+id/ico"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_marginRight="6dip"
android:src="@drawable/icon">
</ImageView>
<LinearLayout
android:orientation="vertical"
android:layout_width="0dip"
android:layout_weight="1"
android:layout_height="fill_parent">
<TextView
android:id="@+id/KfzNameModel"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:gravity="center_vertical"
android:text="My Application"
android:textColor="#FFFFFF"
android:textSize="23px">
</TextView>
<TextView
android:id="@+id/KfzLastFuel"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:singleLine="true"
android:ellipsize="marquee">
</TextView>
</LinearLayout>
</LinearLayout>
Alles anzeigen
Hier noch eine Funktion mit der Sie die Datenbank und die für dieses Bsp. benötigten
Datenbanktabellen anlegen können.
Java
private void onCreateDBAndDBTabled()
{
SQLiteDatabase myDB = null;
try {
myDB = this.openOrCreateDatabase("TankPro2", MODE_PRIVATE, null);
Log.v(tag, "DB created");
// myDB.execSQL("DROP TABLE IF EXISTS fahrzeuge;");
// myDB.execSQL("DROP TABLE IF EXISTS tanken;");
myDB.execSQL("CREATE TABLE IF NOT EXISTS fahrzeuge" +
" (_id integer primary key autoincrement, " +
"name varchar(100), " +
"model varchar(100), " +
"bemerkungen varchar(255), " +
"kraftstoffart integer(3), " +
"tankinhalt integer(3), " +
"nutzungsart integer(1), " +
"zuletztgetankt date, "+
"kmstand integer)"
+";");
Log.v(TankPro2.tag, "DB-Table fahrzeuge created");
myDB.execSQL("CREATE TABLE IF NOT EXISTS tanken "
+ " (_id integer primary key autoincrement, " +
"kfzid integer, " +
"datum date, " +
"kmstand integer, " +
"getankt decimal(12,3), " +
"gezahlt decimal(12,3), " +
"bemerkungen varchar(255))"
+";");
Log.v(TankPro2.tag, "DB-Table tanken created");
} finally {
if (myDB != null)
myDB.close();
}
}
Alles anzeigen