| |||||||
Das Thema "Symbol vor Eintrag in ListView setzen" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.
|
| | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Android-Hilfe.de Mitglied | Kann mir einer sagen wie ich je nach Status (Fahrzeugart privat, dienstlich) ein anderes Symbol vor jeden Eintrag in der ListView bekomme? Hier mein source fahrzeuge.java Code: public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setDefaultKeyMode(DEFAULT_KEYS_SHORTCUT);
getListView().setOnCreateContextMenuListener(this);
myDB = this.openOrCreateDatabase(TankPro2.MY_DATABASE_NAME, MODE_PRIVATE, null);
Cursor c = myDB.rawQuery("SELECT _id, name || ', ' || model as bezeichnung, tankinhalt FROM " + TankPro2.MY_DATABASE_TABLE, null);
startManagingCursor(c);
final SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.fahrzeuge,
c,
new String[] { "_id" },
new int[] { R.id.KfzNameModel });
adapter.setViewBinder(new ViewBinder()
{
@Override
public boolean setViewValue(View view, Cursor theCursor, int column)
{
final String ColNameModel = theCursor.getString(1); //Name und Model
((TextView)view).setText(ColNameModel);
return true;
}
});
this.setListAdapter(adapter);
} Code: <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:id="@+id/KfzNameModel"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="10px"
android:textStyle="bold" android:textSize="24px">
</TextView>
</LinearLayout>
Vielen Dank
__________________ HTC-Magic white Development: Eclipse Ganymede + Android SDK 1.5 Linux Mint 6 |
| | |
| | #2 (permalink) |
| Erfahrener Benutzer Registriert seit: 15.01.2009
Beiträge: 223
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
|
In das layout fahrzeug.xml ein View für das Bildchen hinzufügen, im Cursoradapter eine weitere Spalte hinzufügen (new String[]{"_id", "_status"}, new int[]{R.id.text, R.id.icon}) und in setViewValue für die Spalten den Text oder das Bild setzen.
|
| | |
| | #4 (permalink) |
| Android-Hilfe.de Mitglied |
Nee so einfach ist es dann wohl doch nicht. Habe das View in der layou-Datei eingefügt. ID = symbol Habe in der activity die zweite Spalte angegeben. (tankinhalt und R.id.symbol) Absturz wenn ich R.id.symbol angebe. gebe ich R.id.KfzNameModel nochmal an. kein Absturz. Nun meine Fragen. Warum der Absturz. Wo soll ich nun sagen dass er auch das Bild anzeigen soll? Hier erst mal mein layout fahrzeuge.xml Code: <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:id="@+id/KfzNameModel"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="10px"
android:textStyle="bold" android:textSize="24px">
</TextView>
<View
android:id="@+id/symbol"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</View>
</LinearLayout> Hier meine java-Datei fahrzeuge.java Code: @Override
protected void onStart() {
super.onStart();
SQLiteDatabase myDB = null;
try{
myDB = this.openOrCreateDatabase(TankPro2.MY_DATABASE_NAME, MODE_PRIVATE, null);
Cursor c = myDB.rawQuery("SELECT _id, name || ', ' || model as bezeichnung, tankinhalt FROM " + TankPro2.MY_DATABASE_TABLE, null);
startManagingCursor(c);
getListView().setOnCreateContextMenuListener(this);
final SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.fahrzeuge,
c,
new String[] { "_id", "tankinhalt" },
new int[] { R.id.KfzNameModel, R.id.symbol }
);
adapter.setViewBinder(new ViewBinder()
{
@Override
public boolean setViewValue(View view, Cursor theCursor, int column)
{
final String ColNameModel = theCursor.getString(1); //Name und Model
((TextView)view).setText(ColNameModel);
return true;
}
});
this.setListAdapter(adapter);
}finally {
if (myDB != null)
myDB.close();
}
}
__________________ HTC-Magic white Development: Eclipse Ganymede + Android SDK 1.5 Linux Mint 6 |
| | |
| | #6 (permalink) |
| Erfahrener Benutzer Registriert seit: 15.01.2009
Beiträge: 223
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
|
Und überlegen, was "in setViewValue für die Spalten den Text oder das Bild setzen." bedeuten könnte :-) 18 Minuten ausprobieren ist zu wenig.... |
| | |
| | #7 (permalink) |
| Android-Hilfe.de Mitglied |
Ich habe es jetzt seit mehreren Stunden probiert und weiß dass der Fehler genau in der function setViewValue liegt. ich habe es in unendlichen Kombinationen versucht. Alles ohne Erfolg. unten habe ich mal meinen Quelltext und die Ausgabe des logcat angehängt. Aus der Logdatei wird man als Anfänger auch nicht schlau. Hier mein Quelltext wie ich es jetzt habe und wie es auch nicht funktioniert fahrzeuge.java Code: @Override
protected void onStart() {
super.onStart();
SQLiteDatabase myDB = null;
try{
myDB = this.openOrCreateDatabase(TankPro2.MY_DATABASE_NAME, MODE_PRIVATE, null);
Cursor c = myDB.rawQuery("SELECT _id, name || ', ' || model as bezeichnung, tankinhalt FROM " + TankPro2.MY_DATABASE_TABLE, null);
startManagingCursor(c);
getListView().setOnCreateContextMenuListener(this);
final SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.fahrzeuge,
c,
new String[] { "tankinhalt", "_id" },
new int[] { R.id.ico, R.id.KfzNameModel }
);
adapter.setViewBinder(new ViewBinder()
{
@Override
public boolean setViewValue(View view, Cursor theCursor, int column)
{
final String ColIcon = theCursor.getString(1);//Icon
final String ColNameModel = theCursor.getString(2); //Name und Model
((ImageView)view).setImageResource(R.drawable.calendar);
((TextView)view).setText(ColNameModel);
return true;
}
});
this.setListAdapter(adapter);
}finally {
if (myDB != null)
myDB.close();
}
} Code: <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" />
<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" />
<TextView
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:singleLine="true"
android:ellipsize="marquee"
android:text="Simple application that shows how to use RelativeLayout" />
</LinearLayout>
</LinearLayout> Code: 05-29 13:02:22.119: ERROR/AndroidRuntime(300): Uncaught handler: thread main exiting due to uncaught exception 05-29 13:02:22.129: ERROR/AndroidRuntime(300): java.lang.ClassCastException: android.widget.ImageView 05-29 13:02:22.129: ERROR/AndroidRuntime(300): at com.ensacom.android.TankPro2.fahrzeuge$1.setViewValue(fahrzeuge.java:71) 05-29 13:02:22.129: ERROR/AndroidRuntime(300): at android.widget.SimpleCursorAdapter.bindView(SimpleCursorAdapter.java:155) 05-29 13:02:22.129: ERROR/AndroidRuntime(300): at android.widget.CursorAdapter.getView(CursorAdapter.java:186) 05-29 13:02:22.129: ERROR/AndroidRuntime(300): at android.widget.AbsListView.obtainView(AbsListView.java:1269) 05-29 13:02:22.129: ERROR/AndroidRuntime(300): at android.widget.ListView.makeAndAddView(ListView.java:1623) 05-29 13:02:22.129: ERROR/AndroidRuntime(300): at android.widget.ListView.fillDown(ListView.java:607) 05-29 13:02:22.129: ERROR/AndroidRuntime(300): at android.widget.ListView.fillFromTop(ListView.java:664) 05-29 13:02:22.129: ERROR/AndroidRuntime(300): at android.widget.ListView.layoutChildren(ListView.java:1481) 05-29 13:02:22.129: ERROR/AndroidRuntime(300): at android.widget.AbsListView.onLayout(AbsListView.java:1113) 05-29 13:02:22.129: ERROR/AndroidRuntime(300): at android.view.View.layout(View.java:6133) 05-29 13:02:22.129: ERROR/AndroidRuntime(300): at android.widget.FrameLayout.onLayout(FrameLayout.java:333) 05-29 13:02:22.129: ERROR/AndroidRuntime(300): at android.view.View.layout(View.java:6133) 05-29 13:02:22.129: ERROR/AndroidRuntime(300): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119) 05-29 13:02:22.129: ERROR/AndroidRuntime(300): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:998) 05-29 13:02:22.129: ERROR/AndroidRuntime(300): at android.widget.LinearLayout.onLayout(LinearLayout.java:918) 05-29 13:02:22.129: ERROR/AndroidRuntime(300): at android.view.View.layout(View.java:6133) 05-29 13:02:22.129: ERROR/AndroidRuntime(300): at android.widget.FrameLayout.onLayout(FrameLayout.java:333) 05-29 13:02:22.129: ERROR/AndroidRuntime(300): at android.view.View.layout(View.java:6133) 05-29 13:02:22.129: ERROR/AndroidRuntime(300): at android.view.ViewRoot.performTraversals(ViewRoot.java:929) 05-29 13:02:22.129: ERROR/AndroidRuntime(300): at android.view.ViewRoot.handleMessage(ViewRoot.java:1482) 05-29 13:02:22.129: ERROR/AndroidRuntime(300): at android.os.Handler.dispatchMessage(Handler.java:99) 05-29 13:02:22.129: ERROR/AndroidRuntime(300): at android.os.Looper.loop(Looper.java:123) 05-29 13:02:22.129: ERROR/AndroidRuntime(300): at android.app.ActivityThread.main(ActivityThread.java:3948) 05-29 13:02:22.129: ERROR/AndroidRuntime(300): at java.lang.reflect.Method.invokeNative(Native Method) 05-29 13:02:22.129: ERROR/AndroidRuntime(300): at java.lang.reflect.Method.invoke(Method.java:521) 05-29 13:02:22.129: ERROR/AndroidRuntime(300): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782) 05-29 13:02:22.129: ERROR/AndroidRuntime(300): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) 05-29 13:02:22.129: ERROR/AndroidRuntime(300): at dalvik.system.NativeStart.main(Native Method)
__________________ HTC-Magic white Development: Eclipse Ganymede + Android SDK 1.5 Linux Mint 6 |
| | |
| | #8 (permalink) |
| Erfahrener Benutzer Registriert seit: 15.01.2009
Beiträge: 223
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
|
Je Spalte wird die Funktion setViewValue aufgerufen, anhand der Spalte kann man sehen, ob man den TextView oder den ImageView setzen muss. Am besten mal einen Breakpoint in die Funktion setzen und dann sich das an ganze ansehen. Die view kann nicht von einer Zeile in die andere vom ImageView zum TextView werden. Also if (column == 1) {...} und so weiter... |
| | |
![]() |
|
| Themen-Optionen | |
| Ansicht | |
| |
| ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Wo ist das Homezone-Symbol? | hillybilly | Android Allgemein | 38 | 16.01.2012 17:20 |
| W-Lan Symbol zeigt Signalstärke nicht richtig an (bei sonst korrekter Funktion) | The Spirit | T-Mobile G1 Forum | 15 | 23.06.2009 08:39 |
| Unbekanntes Symbol in Statusleiste: Sieht aus wie ein kleines G1 | Eddie8 | T-Mobile G1 Forum | 9 | 03.04.2009 12:15 |
| Anwendungen auf die Speicherkarte setzen | famakoeln | Android Allgemein | 4 | 24.02.2009 13:32 |
| ListView in einer Klasse ansprechen | Manfred | Android App Entwicklung | 1 | 13.02.2009 08:36 |