{"id":288,"date":"2010-04-22T06:49:29","date_gmt":"2010-04-22T05:49:29","guid":{"rendered":"http:\/\/www.webmaid.de\/?p=288"},"modified":"2010-04-22T06:49:29","modified_gmt":"2010-04-22T05:49:29","slug":"listactivity-und-listadapter","status":"publish","type":"post","link":"https:\/\/www.webmaid.de\/2010\/04\/listactivity-und-listadapter\/","title":{"rendered":"ListActivity und ListAdapter – keine Geheimnisse in Android"},"content":{"rendered":"

Um eine Liste von Eintr\u00e4gen anzeigen zu lassen, bietet Android die M\u00f6glichkeit der ListActivity. Eine einfache ListActivity<\/a> mit einer statischen Menge von Eintr\u00e4gen ist schnell implementiert; eine komplexe ListActivity mit eigenem ListAdapter und Performanceproblemen leider auch.
\n<\/p>\n

\r\npublic class SimpleStaticListActivity extends ListActivity {\r\n\/\/ ...\r\n   private static String[] listEntries = new String[] {\"1. Eintrag\", \"2. Eintrag\", \"3. Eintrag\", \"4. Eintrag\"};\r\n   public void onCreate() {\r\n                super.onCreate(savedInstanceState);\r\n                \/\/ dein Layout\r\n\t\tsetContentView(R.layout.simpleStaticList);\r\n                \/\/ der List-Adapter\r\n               setListAdapter(new ArrayAdapter(this, R.id.TextView01, listEntries));\r\n   }\r\n}\r\n<\/code><\/pre>\n

Dies wir aber nur selten der Fall sein und auch in diesem Beispiel benutzen wir bereits einen ArrayAdapter<\/a>, der die Methode getView implementiert und sich entsprechend performant um die Darstellung k\u00fcmmert. In den meisten F\u00e4llen werden die Daten aus einer Datenbank stammen oder von einer anderen Datenquelle, die einen Cursor bereitstellt. F\u00fcr diese Eventualit\u00e4t stellt Android den SimpleCursorAdapter bereit; dieser Adapter mappt eine Menge von Columns (der Datenquelle) auf eine Menge von Ids von Views.<\/p>\n

\r\npublic class SimpleCursorAdapterListActivity extends ListActivity {\r\n\/\/ ...\r\n   public void onCreate() {\r\n                super.onCreate(savedInstanceState);\r\n                \/\/ dein Layout\r\n\t\tsetContentView(R.layout.simpleStaticList);\r\n                \/\/ dbHelper ^= Facade zur Datenbank\r\n               Cursor entries = dbHelper.getEntries();\r\n               \/\/ Wichtig: Android k\u00fcmmert sich um den Lifecycle des Cursors\r\n               startManagingCursor(entries);\r\n               SimpleCursorAdapter entryAdapter = new SimpleCursorAdapter(this, R.layout.row, entries, new String[] {\"_id\"}, new int[] {R.id.TextView01});\r\n               setListAdapter(entryAdapter);\r\n   }\r\n}\r\n<\/code><\/pre>\n

Okay nun haben wir eine einfache Liste mit einer Menge von Eintr\u00e4gen, die immer gleich aussehen. Meist reicht dies schon. Will man jetzt mehr Einfluss haben, dann muss man einen eigenen ListAdapter<\/a> entwickeln und die getView – Methode implementieren. Hier ist aber Vorsicht geboten. getView wird h\u00e4ufiger aufgerufen, als man sich vielleicht vorstellen kann. Auf der Developer Conference hat Romain Guy einen Vortrag<\/a> \u00fcber „Turbo-charge your UI: How to Make your Android UI Fast and Efficient“ gehalten und ist genau auf diesen Punkt eingegangen. Die wichtigsten Punkte sind:<\/p>\n