Jetzt kostenlos registrieren. Mitglieder surfen ohne Werbung auf Android-Hilfe.de!
Zurück   Android-Hilfe.de > Android Developer > Android App Entwicklung

Symbol vor Eintrag in ListView setzen

Das Thema "Symbol vor Eintrag in ListView setzen" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.


Antwort

 

Themen-Optionen Ansicht
Alt 27.05.2009, 13:15   #1 (permalink)
Android-Hilfe.de Mitglied
 
Benutzerbild von ensacom

Registriert seit: 15.05.2009
Beiträge: 68
Abgegebene Danke: 0
Erhielt 4 Danke für 1 Beitrag
ensacom eine Nachricht über ICQ schicken ensacom eine Nachricht über MSN schicken ensacom eine Nachricht über Skype™ schicken
Unglücklich Symbol vor Eintrag in ListView setzen

Hallo, ich lese mehrere Werte aus einer SQLite Datenbank aus und füge die in eine ListView ein.

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);
  }
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>

</LinearLayout>

Vielen Dank
__________________
HTC-Magic white
Development: Eclipse Ganymede + Android SDK 1.5
Linux Mint 6
ensacom ist offline   Mit Zitat antworten
Alt 28.05.2009, 21:36   #2 (permalink)
Erfahrener Benutzer
 
Benutzerbild von friedger

Registriert seit: 15.01.2009
Beiträge: 223
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
Standard AW: Symbol vor Eintrag in ListView setzen

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.
friedger ist offline   Mit Zitat antworten
Alt 28.05.2009, 22:01   #3 (permalink)
Android-Hilfe.de Mitglied
 
Benutzerbild von ensacom

Registriert seit: 15.05.2009
Beiträge: 68
Abgegebene Danke: 0
Erhielt 4 Danke für 1 Beitrag
ensacom eine Nachricht über ICQ schicken ensacom eine Nachricht über MSN schicken ensacom eine Nachricht über Skype™ schicken
Standard AW: Symbol vor Eintrag in ListView setzen

klingt einfach, werde es gleich mal testen und melde mich dann wieder.

Danke erst mal.
__________________
HTC-Magic white
Development: Eclipse Ganymede + Android SDK 1.5
Linux Mint 6
ensacom ist offline   Mit Zitat antworten
Alt 28.05.2009, 22:19   #4 (permalink)
Android-Hilfe.de Mitglied
 
Benutzerbild von ensacom

Registriert seit: 15.05.2009
Beiträge: 68
Abgegebene Danke: 0
Erhielt 4 Danke für 1 Beitrag
ensacom eine Nachricht über ICQ schicken ensacom eine Nachricht über MSN schicken ensacom eine Nachricht über Skype™ schicken
Standard AW: Symbol vor Eintrag in ListView setzen

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
ensacom ist offline   Mit Zitat antworten
Alt 29.05.2009, 08:19   #5 (permalink)
Erfahrener Benutzer
 
Benutzerbild von friedger

Registriert seit: 15.01.2009
Beiträge: 223
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
Standard AW: Symbol vor Eintrag in ListView setzen

Schau mal in Dein LogCat!
friedger ist offline   Mit Zitat antworten
Alt 29.05.2009, 08:21   #6 (permalink)
Erfahrener Benutzer
 
Benutzerbild von friedger

Registriert seit: 15.01.2009
Beiträge: 223
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
Standard AW: Symbol vor Eintrag in ListView setzen

Und überlegen, was "in setViewValue für die Spalten den Text oder das Bild setzen." bedeuten könnte :-)
18 Minuten ausprobieren ist zu wenig....
friedger ist offline   Mit Zitat antworten
Alt 29.05.2009, 13:05   #7 (permalink)
Android-Hilfe.de Mitglied
 
Benutzerbild von ensacom

Registriert seit: 15.05.2009
Beiträge: 68
Abgegebene Danke: 0
Erhielt 4 Danke für 1 Beitrag
ensacom eine Nachricht über ICQ schicken ensacom eine Nachricht über MSN schicken ensacom eine Nachricht über Skype™ schicken
Cool AW: Symbol vor Eintrag in ListView setzen

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();
        }
    }
fahrzeuge.xml
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>
LogCat
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
ensacom ist offline   Mit Zitat antworten
Alt 29.05.2009, 23:52   #8 (permalink)
Erfahrener Benutzer
 
Benutzerbild von friedger

Registriert seit: 15.01.2009
Beiträge: 223
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
Standard AW: Symbol vor Eintrag in ListView setzen

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...
friedger ist offline   Mit Zitat antworten
Antwort

Stichworte
-

Themen-Optionen
Ansicht


Ähnliche Themen

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




Du liest gerade: "Symbol vor Eintrag in ListView setzen" unter "Android App Entwicklung" auf Android-Hilfe.de.


Powered by vBulletin®
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
© Android-Hilfe.de 2012 - All rights reserved.