1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Mehrere TextViews in ListView

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Gingerbread, 24.03.2011.

  1. Gingerbread, 24.03.2011 #1
    Gingerbread

    Gingerbread Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    110
    Erhaltene Danke:
    6
    Registriert seit:
    21.01.2011
    Um mehrere TextViews in meiner ListView anzuzeigen bin ich nach folgendem Beispiel vorgegangen:

    Werte aus Datenbank in verschiedenen Spalten und Zeilen in einer Liste ausgeben - Tutorials & FAQs - Android-Developers

    Jetzt bekomme ich folgender Fehlermeldung
    java.l ang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'

    Aber das kann ja gar nicht gehen, da es in der .xml gar kein ListView item gibt.
     
  2. muck, 24.03.2011 #2
    muck

    muck Android-Hilfe.de Mitglied

    Beiträge:
    62
    Erhaltene Danke:
    7
    Registriert seit:
    07.11.2010
    Das fehlt wohl in der Beschreibung.

    In der xml-Datei der Activity muß min.
    Code:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="[URL]http://schemas.android.com/apk/res/android[/URL]"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
        <ListView
         android:id="@+id/android:list"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         />
    </LinearLayout>
    
    enthalten sein.

    fahrzeuge.xml ist nicht die xml-Datei der Activity sprich die xml.Datei die in
    onCreate setContentView(R.layout.xxx) übergeben wird.

    Man kann das dann noch so gestallten dass für den Fall einer DB-Abfrage ohne Ergebnis keine leere Liste sondern ein alternatives Layout angezeigt wird.
    Code:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="[URL]http://schemas.android.com/apk/res/android[/URL]"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
    <ListView
     android:id="@+id/android:list"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     />
     <LinearLayout xmlns:android="[URL]http://schemas.android.com/apk/res/android[/URL]"
         android:id="@+id/noteEmptyProductList"
         android:orientation="vertical"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
         android:visibility="gone"
         >
      <TextView
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:paddingTop="25px"
       android:paddingLeft="20px"
       android:text="Die Liste ist leer !!!"
       />
     </LinearLayout>
    </LinearLayout>
    
    Aufruf im Code:
    Code:
    ListView listView = (ListView) findViewById(android.R.id.list);
    listView.setEmptyView(findViewById(R.id.noteEmptyProductList));
    
    EDIT: Wenn ich mir das Beispiel nochmal anschaue würde ich sagen der hat sich was zusammengeschustert was zufällig funktioniert hat. Das ist sehr schlecht was da steht.
     
    Zuletzt bearbeitet: 24.03.2011
  3. Gingerbread, 24.03.2011 #3
    Gingerbread

    Gingerbread Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    110
    Erhaltene Danke:
    6
    Registriert seit:
    21.01.2011
    Ok,
    hat vll irgendwer eine annehmbare Anleitung zum erstellen einer ListView mit mehreren Elementen/Views?
     
  4. garak, 25.03.2011 #4
    garak

    garak Ehrenmitglied

    Beiträge:
    8,270
    Erhaltene Danke:
    4,795
    Registriert seit:
    12.12.2009
    Schau dir mal in den Api-Demos Liste 6 an, da wird mit Titeln gearbeitet ansonsten wäre eine expandierende Liste auch eine Möglichkeit, da wären die Titel dann die Gruppen die man auch auf- und zu-klappen könnte.
     
  5. muck, 25.03.2011 #5
    muck

    muck Android-Hilfe.de Mitglied

    Beiträge:
    62
    Erhaltene Danke:
    7
    Registriert seit:
    07.11.2010
    Was hast Du denn vor, und wo kommen die Daten her?
     
  6. Gingerbread, 25.03.2011 #6
    Gingerbread

    Gingerbread Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    110
    Erhaltene Danke:
    6
    Registriert seit:
    21.01.2011
    Die Daten werden aus einer Datenbank abgerufen und sollen formatiert dargestellt werden.
    Außerdem soll noch eine Ceckbox in die ListView eingebaut werden.
     
  7. muck, 25.03.2011 #7
    muck

    muck Android-Hilfe.de Mitglied

    Beiträge:
    62
    Erhaltene Danke:
    7
    Registriert seit:
    07.11.2010
    Damit wird CheckedTextView zu Deinem Zauberwort. (Android bringt da von Haus aus Layouts mit, da kann man gut abschauen. In Eclipse sind die nicht zu öffnen aber aus dem Dateisystem heraus kann man sich das anschauen.)

    Ich versuch mal was auf die Schnelle (ohne Textformatierung und einzeilig)
    checked_text_view.xml
    Code:
    <?xml version="1.0" encoding="utf-8"?>
    <CheckedTextView xmlns:android="[URL]http://schemas.android.com/apk/res/android[/URL]"
        android:id="@+id/txtZeile1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:gravity="center_vertical"
        android:checkMark="?android:attr/textCheckMark"
        android:paddingLeft="6dip"
        android:paddingRight="6dip"
    />
    
    LayoutfileDerActivity.xml (android:choiceMode="multipleChoice" erlaubt mehrere angehakte Items)
    Code:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="[URL]http://schemas.android.com/apk/res/android[/URL]"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
        <ListView
         android:id="@+id/android:list"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:choiceMode="multipleChoice"
         />
    </LinearLayout>
    
    Activity.java muss von ListActivity erben!!!
    Code:
    Cursor list = dbConn.rawQuery("SELECT _id, name FROM tablexy WHERE _id = 5", null);
    SimpleCursorAdapter listAdapter; = new SimpleCursorAdapter (this, R.layout.checked_text_view.xml, list, new String[] {"name"}, new int[] {R.id.txtZeile1});
    setListAdapter(listAdapter);
    startManagingCursor(list);
    
    Das müsste Dir eine Liste erstellen. Du müsstest das um eine zweite Textzeile und die Formatierung erweitern. Des weiteren würde ich Dir dann empfehlen einen performanteren Adapter zu schreiben. (Schlagwort: ViewHolderPattern)
    Mal als Anhaltspunkt:
    Code:
    public class ProductListAdapter extends SimpleCursorAdapter {
     private int sumIndex = -1;
     
     class ViewHolder {
      private TextView tvSum;
     }
     
     public ProductListAdapter(Context context, int layout, Cursor list, String[] sum, int[] productIds) {
      super(context, layout, productList, sum, productIds);
     
      sumIndex = list.getColumnIndex("name");
     }
     
     @Override
     public View newView(Context context, Cursor cursor, ViewGroup parent) {
      final View view = super.newView(context, cursor, parent);
      final ViewHolder viewHolder = new ViewHolder();
     
      viewHolder.tvSum = (TextView) view.findViewById(R.id.txtZeile1);
     
      view.setTag(viewHolder);
      return view;
     }
     
     @Override
     public void bindView(View view, Context context, Cursor cursor) {
      final ViewHolder viewHolder = (ViewHolder) view.getTag();
     
      viewHolder.tvSum.setText(cursor.getString(sumIndex));
     }
    }
    
     
  8. Gingerbread, 26.03.2011 #8
    Gingerbread

    Gingerbread Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    110
    Erhaltene Danke:
    6
    Registriert seit:
    21.01.2011
  9. Gingerbread, 26.03.2011 #9
    Gingerbread

    Gingerbread Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    110
    Erhaltene Danke:
    6
    Registriert seit:
    21.01.2011
    Habe es jetzt nicht mittels CheckedTextView gelöst, sondern mit einer einfachen Checkbox rechts neben dem Text.
    Jedoch zeigt die onListItemClick() Methode dann keine Auswirkungen mehr. Das heißt, wenn ich ein Item der ListView anklicke, passiert nichts.

    Edit: Habe es jetzt doch mittels CheckedTextView gemacht, jedoch passiert nichts wenn ich auf einen Button klicke. Hab also das gleiche Problem wie hier: http://www.android-hilfe.de/android-app-entwicklung/64-multiple-choice-list.html#post92509
    Aber ich habe ja schon android:choiceMode="multipleChoice" deklariert
     
    Zuletzt bearbeitet: 26.03.2011
  10. muck, 26.03.2011 #10
    muck

    muck Android-Hilfe.de Mitglied

    Beiträge:
    62
    Erhaltene Danke:
    7
    Registriert seit:
    07.11.2010
    Welcher Button? Poste mal den Code.

    Gesendet von meinem HTC Desire mit der Android-Hilfe.de-App
     
  11. Gingerbread, 26.03.2011 #11
    Gingerbread

    Gingerbread Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    110
    Erhaltene Danke:
    6
    Registriert seit:
    21.01.2011
    Also meine ListView sieht so ähnlich aus wie dir hier:
    [​IMG]

    Nur das ich halt mehrere TextViews mit Inhalt fülle. Wenn ich jetzt auf die CheckedTextBox klicke passiert nichts. Es taucht kein grüner Pfeil drin auf.
     
  12. Gingerbread, 12.04.2011 #12
    Gingerbread

    Gingerbread Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    110
    Erhaltene Danke:
    6
    Registriert seit:
    21.01.2011
    Weiß keiner woran es liegt, dass es funktioniert wenn meine ListView nur eine TextView pro row enthält?
    Wenn ich dann mehrere formatierte TextViews einfüge, dann hat das klicken einfach keine Auswirkung.
     

Diese Seite empfehlen