1. Hast Du Lust, bei uns mitzuarbeiten und das AH-Team zu verstärken? Alle Details zu dieser aktuellen Herausforderung findest Du hier.
  1. SirMArtin, 07.09.2009 #1
    SirMArtin

    SirMArtin Threadstarter freier Samsungsupporter

    Hallo zusammen,

    ich habe ein wenig Probleme mit der ListView. Nach einigem Lesen in der Doku bin ich zu folgendem Code gekommen:

    ResultViewer.java
    Code:
    public class ResultViewer extends ListActivity {
      private static final String LONG_DATE_FORMAT = "dd MMM yyyy hh:mm";
    
      /** Called when the activity is first created. */
      @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.result);
        String pkgNo = this.getIntent().getStringExtra("package_id");
        putResult(pkgNo);
      }
    
      private void putResult(String pkgnr) {
    
    // getting the result from dummy data
        History res = XMLParser.parse(null);
    
        if (res == null) {
          Toast.makeText(getBaseContext(), "Es konnte kein Ergebnis abgerufen werden.", Toast.LENGTH_LONG).show();
        } else {
          // matching the result to the UI
    
          List<Map<String, String>> content = new ArrayList<Map<String, String>>();
          for (Event event : res.getEvents()) {
            HashMap<String, String> map = new HashMap<String, String>();
            map.put("date", event.getDisplayDate());
            map.put("status", event.getDisplayStatus());
            content.add(map);
          }
    
          // Create an array to specify the fields we want to display in the list
          // (only TITLE)
          String[] from = new String[] { "date", "status" };
    
          // and an array of the fields we want to bind those fields to (in this
          // case just text1)
          int[] to = new int[] { R.id.result_item_date, R.id.result_item_status };
    
          SimpleAdapter adapter = new SimpleAdapter(this, content, R.layout.result_list_item, from, to);
          setListAdapter(adapter);
        }
      }
    }
    result.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/lbl_result_title" style="@style/Caption"
            android:layout_width="fill_parent" android:layout_height="wrap_content"
            android:text="@string/lbl_result_title" android:layout_marginLeft="10px"
            android:layout_marginTop="0px" />
        <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="fill_parent" android:layout_height="fill_parent"
            android:stretchColumns="1">
    
            <TableRow>
                <TextView android:id="@+id/lbl_tracking_id" style="@style/Label"
                    android:layout_column="1" android:text="@string/lbl_tracking_id"
                    android:layout_marginLeft="2px" android:layout_marginTop="2px" />
                <TextView android:id="@+id/tracking_id" android:gravity="right"
                    android:text="@string/result_status_text_default"
                    android:layout_marginRight="2px" android:layout_marginTop="2px" />
            </TableRow>
    
            <TableRow>
                <TextView android:id="@+id/lbl_result_date" style="@style/Label"
                    android:layout_column="1" android:text="@string/lbl_result_date"
                    android:layout_marginLeft="2px" android:layout_marginTop="2px" />
                <TextView android:id="@+id/result_date" android:gravity="right"
                    android:text="@string/result_date_default"
                    android:layout_marginRight="2px" android:layout_marginTop="2px" />
            </TableRow>
        </TableLayout>
    
        <ListView android:id="@+id/list"
            android:orientation="vertical" android:layout_width="fill_parent"
            android:layout_height="fill_parent" android:layout_marginTop="0px"
            android:scrollbars="vertical">
            
        </ListView>
        
    </LinearLayout>
    
    Führe ich die App nun aus, bekomme ich immer die Fehlermeldung:
    Code:
    09-07 09:33:26.877: WARN/dalvikvm(1477): threadid=3: thread exiting with uncaught exception (group=0x4000fe70)
    09-07 09:33:26.877: ERROR/AndroidRuntime(1477): Uncaught handler: thread main exiting due to uncaught exception
    09-07 09:33:26.897: ERROR/AndroidRuntime(1477): java.lang.RuntimeException: Unable to start activity ComponentInfo{de.keineantwort.android.packagetracer/de.keineantwort.android.packagetracer.ResultViewer}: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'
    09-07 09:33:26.897: ERROR/AndroidRuntime(1477):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2268)
    09-07 09:33:26.897: ERROR/AndroidRuntime(1477):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2284)
    09-07 09:33:26.897: ERROR/AndroidRuntime(1477):     at android.app.ActivityThread.access$1800(ActivityThread.java:112)
    09-07 09:33:26.897: ERROR/AndroidRuntime(1477):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1692)
    09-07 09:33:26.897: ERROR/AndroidRuntime(1477):     at android.os.Handler.dispatchMessage(Handler.java:99)
    09-07 09:33:26.897: ERROR/AndroidRuntime(1477):     at android.os.Looper.loop(Looper.java:123)
    09-07 09:33:26.897: ERROR/AndroidRuntime(1477):     at android.app.ActivityThread.main(ActivityThread.java:3948)
    09-07 09:33:26.897: ERROR/AndroidRuntime(1477):     at java.lang.reflect.Method.invokeNative(Native Method)
    09-07 09:33:26.897: ERROR/AndroidRuntime(1477):     at java.lang.reflect.Method.invoke(Method.java:521)
    09-07 09:33:26.897: ERROR/AndroidRuntime(1477):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
    09-07 09:33:26.897: ERROR/AndroidRuntime(1477):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
    09-07 09:33:26.897: ERROR/AndroidRuntime(1477):     at dalvik.system.NativeStart.main(Native Method)
    09-07 09:33:26.897: ERROR/AndroidRuntime(1477): Caused by: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'
    09-07 09:33:26.897: ERROR/AndroidRuntime(1477):     at android.app.ListActivity.onContentChanged(ListActivity.java:236)
    09-07 09:33:26.897: ERROR/AndroidRuntime(1477):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:312)
    09-07 09:33:26.897: ERROR/AndroidRuntime(1477):     at android.app.Activity.setContentView(Activity.java:1626)
    09-07 09:33:26.897: ERROR/AndroidRuntime(1477):     at de.keineantwort.android.packagetracer.ResultViewer.onCreate(ResultViewer.java:27)
    09-07 09:33:26.897: ERROR/AndroidRuntime(1477):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
    09-07 09:33:26.897: ERROR/AndroidRuntime(1477):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2231)
    09-07 09:33:26.897: ERROR/AndroidRuntime(1477):     ... 11 more
    
    Das kann ich mir nicht erklären, da ich ja ne ListView mit der ID "list" habe. Wobei ich das auch Käse finde. Ich hätte ja gern ggf. mehrere ListActivities in meiner App und AFAIK ist die ID in der XML unique innerhalb der App.

    Hat einer ne Idee, was ich falsch mache?

    SirMArtin
     
  2. Manfred, 08.09.2009 #2
    Manfred

    Manfred Erfahrener Benutzer

    Im Layout Ordner muss in der XML Datei, welche das layout beschreibt die ListView folgendermaßen heissen: "@+id/android:list" (Siehe Fehlerbeschreibung 3 Zeile)

    z.B.

    <ListView android:id="@+id/android:list" android:layout_width="wrap_content" android:layout_y="35px" android:layout_height="330px"></ListView>
     
  3. SirMArtin, 08.09.2009 #3
    SirMArtin

    SirMArtin Threadstarter freier Samsungsupporter

    Hm, das hab ich aus der Fehlermeldung nicht gelesen. Ich hätte eher das android:id="" vermutet. :(

    Danke für den Hinweis!

    Jetzt ist die Exception weg, aber es wird immer noch nix angezeigt. :( Das Debugging zeigt mir, dass "content" gefüllt ist, wenn es in den Constructor des SimpleAdapter gesetzt wird.

    SirMArtin, etwas verzweifelnd
     
    Zuletzt bearbeitet: 08.09.2009
  4. Shinigami, 08.09.2009 #4
    Shinigami

    Shinigami Fortgeschrittenes Mitglied

    Hi.

    Versuch mal bitte dem ListView in der XML eine "normale" eigene ID zu geben und dann im Quellcode mit findViewById("id") eine Referenz auf deinen Listview zu bekommen (die entspr. Variable muss natürlich vom Typ ListView sein) und dann diesem ListView mit setAdapter deinen SimpleAdapter zuweisen.

    Ich bin mir nicht sicher ob eine Activity, die von ListActivity erbt im Layout noch diverse andere Layout-Elemente haben kann/darf.

    Gruß,
    Shini
     
  5. Manfred, 08.09.2009 #5
    Manfred

    Manfred Erfahrener Benutzer

    Hmm ich weiss nur ich hatte das auch mit der ID.
    Kann die mal code von mir zeigen:

    Das ganze ist eine Highscoreliste

    hs.xml:
    Code:
    <AbsoluteLayout android:id="@+id/LinearLayout01" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:screenOrientation = "portrait"
    xmlns:android="http://schemas.android.com/apk/res/android">
    
    
    <Button android:text="OK" android:layout_height="50px" android:layout_width="200px" android:layout_x="55px" android:layout_y="380px" android:id="@+id/HSButton"></Button>
    <ListView android:id="@+id/android:list" android:layout_width="wrap_content" android:layout_y="35px" android:layout_height="330px"></ListView>
    <TextView android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="HIGHSCORE" android:textSize="20px" android:layout_x="100px" android:layout_y="5px" android:textColor="#ffff00"></TextView>
    </AbsoluteLayout>
    
    HsActivity.java
    Code:
    package com.android.blackjack;
    
    import android.app.ListActivity;
    import android.database.Cursor;
    import android.os.Bundle;
    import android.view.KeyEvent;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.SimpleCursorAdapter;
    
    public class HsActivity extends ListActivity implements OnClickListener
    {    
        private BjDbAdapter database;
    
        
        public void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            this.setContentView(R.layout.hs); 
            this.setRequestedOrientation(1);
            
            database = new BjDbAdapter(this);
            database.open();
            fillHighscore();
            database.close();
            
            Button b = (Button)this.findViewById(R.id.HSButton);
            b.setOnClickListener(this);
            
        }
        
    
        private void fillHighscore()
        {
            Cursor notesCursor = database.getHighscore();
            startManagingCursor(notesCursor);
            
            // Create an array to specify the fields we want to display in the list (only TITLE)
            String[] from = new String[]{BjDbAdapter.KEY_NAME, BjDbAdapter.KEY_POINTS};
            
            // and an array of the fields we want to bind those fields to (in this case just text1)
            int[] to = new int[]{R.id.text1, R.id.text2};
            
            // Now create a simple cursor adapter and set it to display
            SimpleCursorAdapter notes = 
                    new SimpleCursorAdapter(this, R.layout.hs_row, notesCursor, from, to);
            setListAdapter(notes);
        }
    
        public void onClick(View v) 
        {
            finish();
            
        }
        
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event)
        {
    
            if(keyCode == KeyEvent.KEYCODE_BACK)
                return super.onKeyDown(KeyEvent.KEYCODE_ENTER, event);
            return super.onKeyDown(keyCode, event);
        }
    }
    
     
  6. SirMArtin, 08.09.2009 #6
    SirMArtin

    SirMArtin Threadstarter freier Samsungsupporter

    Jetzt lade ich die ListView "result_list" vorher und setze den Adapter daran. Tut ebenso wenig. Spannend ist, dass einfach nix passiert. Keine Fehler meldung, kein nix.

    Code:
    ListView listview = (ListView) findViewById(R.id.result_list);
          SimpleAdapter adapter = new SimpleAdapter(this, content, R.layout.result_list_item, from, to);
          listview.setAdapter(adapter);
    @Manfred: Der Unterschied, den ich zwischen Deinem und meinem Code sehe ist, dass Du einen SimpleCurserAdapter nutzt und ich einen SimpleAdapter, da meine Daten nicht aus der DB kommen sondern aus nem REST-Request.

    SirMArtin
     
  7. friedger, 09.09.2009 #7
    friedger

    friedger Erfahrener Benutzer

    Kannst Du nochmal den ganzen Code schicken? Was sagt denn der Debugger?
     
  8. Manfred, 09.09.2009 #8
    Manfred

    Manfred Erfahrener Benutzer

    SirMArtin gefällt das.
  9. SirMArtin, 09.09.2009 #9
    SirMArtin

    SirMArtin Threadstarter freier Samsungsupporter

    Hab ich versucht. Hat nichts verändert.

    Im Originalpost ist der gesamte Code. Was fehlt Dir?

    Der Debugger zeigt, dass die Liste in jedem Fall gefüllt ist. Das "setAdapter" habe ich nicht gedebuggt.

    EDIT:
    Nachdem ich das jetzt gelesen habe... Sieht ganz interessant aus. Werde es heute Abend mal ausprobieren...

    SirMArtin
     
    Zuletzt bearbeitet: 09.09.2009
  10. Shinigami, 09.09.2009 #10
    Shinigami

    Shinigami Fortgeschrittenes Mitglied

    Ein Versuch noch:

    Dein TableLayout hat als "Höhe" fill_parent. Vllt bleibt dadurch schlicht kein Platz um den ListView anzuzeigen??!

    Gruß,
    Shini
     
    SirMArtin gefällt das.
  11. SirMArtin, 09.09.2009 #11
    SirMArtin

    SirMArtin Threadstarter freier Samsungsupporter

    Sch**!§%$"! Copy&Paste. Das war's! Manchmal sieht man den Wald vor lauter Bäumen nicht.
     
Die Seite wird geladen...
Ähnliche Themen Forum Datum
[OFFEN] Widget zeigt keine ImageView an. Android App Entwicklung 18.09.2017
[GESCHLOSSEN] Random ListItem ausgeben funktioniert nicht mehr Android App Entwicklung 13.08.2017
[OFFEN] Bild per Intent an ListView übergeben und anzeigen Android App Entwicklung 13.08.2017
[OFFEN] Menu zeigt keine Icons nur ... Android App Entwicklung 09.05.2017
[ERLEDIGT] Listview mit Datenbank über Custom ArrayList verbinden Android App Entwicklung 22.04.2017
[ERLEDIGT] Drawer mit scrollbarem Listview Android App Entwicklung 27.03.2017
ListView fix am unteren Bildschirmrand ausgeben Android App Entwicklung 01.03.2017
SQLite3 zeigt keine DB's an Android App Entwicklung 27.02.2017
ProgressBar in ListView Android App Entwicklung 03.01.2017
ListView Element an eine Datenbank senden Android App Entwicklung 04.12.2016

Benutzer fanden diese Seite durch die Suche nach:

  1. c# listview zeigt nix an

Du betrachtest das Thema "ListView zeigt nix an" im Forum "Android App Entwicklung",