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

Wer kann mir diesen Quelltext erklären?

Das Thema "Wer kann mir diesen Quelltext erklären?" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.


Antwort

 

Themen-Optionen Ansicht
Alt 26.05.2009, 08:16   #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
Cool Wer kann mir diesen Quelltext erklären?

Hallo an die, die sich richtig mit Java und Android auskennen.
Wer kann mir folgenden Quellcode erklären?

Ich bin bis jetzt nicht dahinter gestiegen was eigentlich passiert.

Ok, es wird Zur Datenbank verbunden,
Dann wird ein SimpleCursorAdapter erstellt (Sowas wie eine Liste?)
Was bedeuten die übergebenen Parameter?

Kein Schimmer was "adapter.setViewBinder(new ViewBinder() {" macht und was setViewValue mit setViewBinder zu tun hat.

Wäre toll wenn mir das einer erklären könnte und vielleicht sogar einen Tipp hat wie ich diese Abfrage so umschreiben kann, dass ich die Daten aus der Datenbank auch in eine Liste ausgeben kann, die in meiner layout.xml definiert ist.
__________________
HTC-Magic white
Development: Eclipse Ganymede + Android SDK 1.5
Linux Mint 6
ensacom ist offline   Mit Zitat antworten
Alt 26.05.2009, 12:10   #2 (permalink)
Android Guru

Registriert seit: 09.05.2009
Beiträge: 2.389
Abgegebene Danke: 36
Erhielt 307 Danke für 289 Beiträge
Standard AW: Wer kann mir diesen Quelltext erklären?

welcher code?
swordi ist gerade online   Mit Zitat antworten
Alt 26.05.2009, 12:12   #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
Reden AW: Wer kann mir diesen Quelltext erklären?

Oh sorry, wie peinlich ;-)

Also hier der code

Code:
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        SQLiteDatabase myDB = null;
          myDB = this.openOrCreateDatabase(TankPro2.MY_DATABASE_NAME, MODE_PRIVATE, null);
         
          Cursor c = myDB.rawQuery("SELECT _id, name, model, tankinhalt FROM " + TankPro2.MY_DATABASE_TABLE + ";", null);        
           startManagingCursor(c);    

           final SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
                                                              android.R.layout.simple_list_item_1, 
                                                              c,
                                                              new String[] { "_id" },
                                                              new int[] { android.R.id.text1 });
           
        adapter.setViewBinder(new ViewBinder() 
        {               
            @Override
            public boolean setViewValue(View view, Cursor theCursor, int column) 
            {
                  final String ColumnName = theCursor.getString(1); //Name
                final String ColumnModel = theCursor.getString(2); //Model
              
                ((TextView)view).setText(ColumnName + ", " + ColumnModel);
                
                return true;
            }
           });
                   
           this.setListAdapter(adapter);
        
           registerForContextMenu(getListView());
  }
__________________
HTC-Magic white
Development: Eclipse Ganymede + Android SDK 1.5
Linux Mint 6
ensacom ist offline   Mit Zitat antworten
Alt 26.05.2009, 22:27   #4 (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: Wer kann mir diesen Quelltext erklären?

Ein Adapter ist etwas das zwischen zwei Dingen eine Verbindung herstellt, in diesem Fall zwischen dem Cursor und der ListView.

Die ListView hält für jeden Listeneintrag eine View bereit, diese wird durch den ViewBinder mit den Werten aus dem Cursor gefüllt.

Wenn Du Dein eigenes Layout verwendest musst Du
android.R.layout.simple_list_item_1 durch Dein Layout für den Listeneintrag ersetzen und android.R.id.text1 durch eine id aus dem Layout.
friedger ist offline   Mit Zitat antworten
Alt 26.05.2009, 22:36   #5 (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: Wer kann mir diesen Quelltext erklären?

Hallo, ich habe ja schon das Problem, wenn ich setContentView(R.layout.fahrzeuge); ins onCreate setze, das mein Programm sofort abstürzt.

Du schreibst, ich soll "android.R.layout.simple_list_item_1" durch mein eigenes Layout ersetzen. Wie meinst Du das? Durch "R.layout.fahrzeuge" ersetzen und die Zeile "setContentView(R.layout.fahrzeuge);" entfernen?

"android.R.id.text1" ersetze ich dann durch die id aus dem Layout, das verstehe ich.
Nur, welche Komponente nimmt man dann am besten für eine Liste?
__________________
HTC-Magic white
Development: Eclipse Ganymede + Android SDK 1.5
Linux Mint 6
ensacom ist offline   Mit Zitat antworten
Alt 26.05.2009, 23:08   #6 (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: Wer kann mir diesen Quelltext erklären?

Ok, ich habe es jetzt dank deiner Hilfe geschafft ein eigenes Layout zu benutzen.
Jetzt habe ich das Problem, das der einfache Klick auf eines der TextEdits nicht mehr funktioniert, das Contextmenu funktioniert noch.

Kann mir einer sagen wie ich nun den einfachen Klick auf einen der Einträge in der Liste hinbekomme?

Hier mein Quelltext
Code:
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        
        SQLiteDatabase myDB = null;
          myDB = this.openOrCreateDatabase(TankPro2.MY_DATABASE_NAME, MODE_PRIVATE, null);
         
          Cursor c = myDB.rawQuery("SELECT _id, name, model, 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.empty });
           
        adapter.setViewBinder(new ViewBinder() 
        {               
            @Override
            public boolean setViewValue(View view, Cursor theCursor, int column) 
            {
                  final String ColumnName = theCursor.getString(1); //Name
                final String ColumnModel = theCursor.getString(2); //Model
              
                ((TextView)view).setText(ColumnName + ", " + ColumnModel);
                
                return true;
            }
           });
                   
           this.setListAdapter(adapter);
        
           registerForContextMenu(getListView());
  }
__________________
HTC-Magic white
Development: Eclipse Ganymede + Android SDK 1.5
Linux Mint 6
ensacom ist offline   Mit Zitat antworten
Alt 26.05.2009, 23:11   #7 (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: Wer kann mir diesen Quelltext erklären?

Wegen der Abstürze unbedingt LogCat befragen, das erklärt einiges.

Für ListActivity braucht man ein R.layout.fahrzeuge und ein R.layout.fahrzeugItem. In fahrzeugItem muss man dann die ids vergeben, die dem SimpleCursorAdapter mitgegeben werden.

setContentView(R.layout.fahrzeuge) ist notwendig und SimpleCursorAdapter muss fahrzeugItem mitgegeben werden. fahrzeugItem kann ein einfaches LinearLayout sein. layout.fahrzeuge muss ein ListView enthalten.
friedger ist offline   Mit Zitat antworten
Alt 26.05.2009, 23:18   #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: Wer kann mir diesen Quelltext erklären?

Was geht denn nicht beim Klicken?
Probier mal onListItemClick und sieh Dir unbedingt nochmal die NotePad Tutorials an.
friedger ist offline   Mit Zitat antworten
Alt 26.05.2009, 23:26   #9 (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: Wer kann mir diesen Quelltext erklären?

Das ist mir jetzt echt zu hoch.
Gebe ich die id eines TextView an geht es, gebe ich aber die id einer ListView an dann stürzt er ab und sagt mir im LogCat folgendes

Code:
05-26 23:25:09.249: ERROR/AndroidRuntime(1361): Uncaught handler: thread main exiting due to uncaught exception
05-26 23:25:09.269: ERROR/AndroidRuntime(1361): java.lang.ClassCastException: android.widget.ListView
05-26 23:25:09.269: ERROR/AndroidRuntime(1361):     at com.ensacom.android.TankPro2.fahrzeuge$1.setViewValue(fahrzeuge.java:57)
05-26 23:25:09.269: ERROR/AndroidRuntime(1361):     at android.widget.SimpleCursorAdapter.bindView(SimpleCursorAdapter.java:155)
05-26 23:25:09.269: ERROR/AndroidRuntime(1361):     at android.widget.CursorAdapter.getView(CursorAdapter.java:186)
05-26 23:25:09.269: ERROR/AndroidRuntime(1361):     at android.widget.AbsListView.obtainView(AbsListView.java:1269)
05-26 23:25:09.269: ERROR/AndroidRuntime(1361):     at android.widget.ListView.makeAndAddView(ListView.java:1623)
05-26 23:25:09.269: ERROR/AndroidRuntime(1361):     at android.widget.ListView.fillDown(ListView.java:607)
05-26 23:25:09.269: ERROR/AndroidRuntime(1361):     at android.widget.ListView.fillFromTop(ListView.java:664)
05-26 23:25:09.269: ERROR/AndroidRuntime(1361):     at android.widget.ListView.layoutChildren(ListView.java:1481)
05-26 23:25:09.269: ERROR/AndroidRuntime(1361):     at android.widget.AbsListView.onLayout(AbsListView.java:1113)
05-26 23:25:09.269: ERROR/AndroidRuntime(1361):     at android.view.View.layout(View.java:6133)
05-26 23:25:09.269: ERROR/AndroidRuntime(1361):     at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
05-26 23:25:09.269: ERROR/AndroidRuntime(1361):     at android.view.View.layout(View.java:6133)
05-26 23:25:09.269: ERROR/AndroidRuntime(1361):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119)
05-26 23:25:09.269: ERROR/AndroidRuntime(1361):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:998)
05-26 23:25:09.269: ERROR/AndroidRuntime(1361):     at android.widget.LinearLayout.onLayout(LinearLayout.java:918)
05-26 23:25:09.269: ERROR/AndroidRuntime(1361):     at android.view.View.layout(View.java:6133)
05-26 23:25:09.269: ERROR/AndroidRuntime(1361):     at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
05-26 23:25:09.269: ERROR/AndroidRuntime(1361):     at android.view.View.layout(View.java:6133)
05-26 23:25:09.269: ERROR/AndroidRuntime(1361):     at android.view.ViewRoot.performTraversals(ViewRoot.java:929)
05-26 23:25:09.269: ERROR/AndroidRuntime(1361):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1482)
05-26 23:25:09.269: ERROR/AndroidRuntime(1361):     at android.os.Handler.dispatchMessage(Handler.java:99)
05-26 23:25:09.269: ERROR/AndroidRuntime(1361):     at android.os.Looper.loop(Looper.java:123)
05-26 23:25:09.269: ERROR/AndroidRuntime(1361):     at android.app.ActivityThread.main(ActivityThread.java:3948)
05-26 23:25:09.269: ERROR/AndroidRuntime(1361):     at java.lang.reflect.Method.invokeNative(Native Method)
05-26 23:25:09.269: ERROR/AndroidRuntime(1361):     at java.lang.reflect.Method.invoke(Method.java:521)
05-26 23:25:09.269: ERROR/AndroidRuntime(1361):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
05-26 23:25:09.269: ERROR/AndroidRuntime(1361):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
05-26 23:25:09.269: ERROR/AndroidRuntime(1361):     at dalvik.system.NativeStart.main(Native Method)
Außerdem ist folgendes merkwürdig.
Lasse ich diese Zeile weg "setContentView(R.layout.fahrzeuge);" und gebe die id der TextView aus meiner xml-Datei an, dann funktioniert es (onListItemClick geht nicht, warscheinlich weil ich eine TextView verwende???)

Füge ich die Zeile "setContentView(R.layout.fahrzeuge);" ein stürzt das Programm sofort ab.
__________________
HTC-Magic white
Development: Eclipse Ganymede + Android SDK 1.5
Linux Mint 6

Geändert von ensacom (26.05.2009 um 23:29 Uhr)
ensacom ist offline   Mit Zitat antworten
Alt 26.05.2009, 23:52   #10 (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: Wer kann mir diesen Quelltext erklären?

Warum das klicken nicht ging habe ich herausgefunden.

Ich habe die beiden Zeilen aus der fahrzeuge.xml entfernt und schon ging es.
Code:
android:clickable="true" 
android:longClickable="true"
Mein Code sieht jetzt so aus.
Code:
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

      //  setContentView(R.layout.fahrzeuge);
        
        SQLiteDatabase myDB = null;
          myDB = this.openOrCreateDatabase(TankPro2.MY_DATABASE_NAME, MODE_PRIVATE, null);
         
          Cursor c = myDB.rawQuery("SELECT _id, name, model, 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.empty });
           
        adapter.setViewBinder(new ViewBinder() 
        {               
            @Override
            public boolean setViewValue(View view, Cursor theCursor, int column) 
            {
                  final String ColumnName = theCursor.getString(1); //Name
                final String ColumnModel = theCursor.getString(2); //Model
              
                ((TextView)view).setText(ColumnName + ", " + ColumnModel);
                
                return true;
            }
           });
                   
           this.setListAdapter(adapter);
        
           registerForContextMenu(getListView());
  }
fahrzeuge.xml
Code:
<?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="fill_parent">

  <TextView 
          android:id="@+id/empty"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="10px" 
        android:textSize="22px">
    </TextView>        

</LinearLayout>
Das müsste doch so jetzt alles stimmen oder?
Wie bekomme ich aber nun die ID des angeklickten EIntrages an mein ContextMenü übergeben?
__________________
HTC-Magic white
Development: Eclipse Ganymede + Android SDK 1.5
Linux Mint 6
ensacom ist offline   Mit Zitat antworten
Antwort

Stichworte
-

Themen-Optionen
Ansicht


Ähnliche Themen

Thema Autor Forum Antworten Letzter Beitrag
Wie kann ich die Netzverbindung abschalten? tes T-Mobile G1 Forum 65 20.04.2011 15:31
Wie kann ich ein Theme instalieren? g-Force1 T-Mobile G1 Forum 30 18.02.2011 15:39
root und Jesus Freke bitte mal für Laien erklären joschijoschi Root / Hacking / Modding für T-Mobile G1 21 23.03.2010 13:31
Wie kann ich mit blau ins Inet? Chris284 T-Mobile G1 Forum 2 27.05.2009 20:34
CHOMP SMS - wer kann helfen? biglitsche T-Mobile G1 Forum 4 22.03.2009 16:37




Du liest gerade: "Wer kann mir diesen Quelltext erklären?" 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.