| |||||||
Das Thema "Wer kann mir diesen Quelltext erklären?" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.
|
| | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Android-Hilfe.de Mitglied | 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 |
| | |
| | #3 (permalink) |
| Android-Hilfe.de Mitglied |
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 |
| | |
| | #4 (permalink) |
| Erfahrener Benutzer Registriert seit: 15.01.2009
Beiträge: 223
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
|
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. |
| | |
| | #5 (permalink) |
| Android-Hilfe.de Mitglied |
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 |
| | |
| | #6 (permalink) |
| Android-Hilfe.de Mitglied |
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 |
| | |
| | #7 (permalink) |
| Erfahrener Benutzer Registriert seit: 15.01.2009
Beiträge: 223
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
|
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. |
| | |
| | #8 (permalink) |
| Erfahrener Benutzer Registriert seit: 15.01.2009
Beiträge: 223
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
|
Was geht denn nicht beim Klicken? Probier mal onListItemClick und sieh Dir unbedingt nochmal die NotePad Tutorials an. |
| | |
| | #9 (permalink) |
| Android-Hilfe.de Mitglied |
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) 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) |
| | |
| | #10 (permalink) |
| Android-Hilfe.de Mitglied |
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" 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());
} 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> 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 |
| | |
![]() |
|
| Themen-Optionen | |
| Ansicht | |
| |
| ||||
| 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 |