Listview-Problem: Einträge erst nach Scrollen sichtbar

R

R3L

Neues Mitglied
0
Hallo zusammen,

ich habe ein (kurioses?) Problem mit ListView.
Ich verwendene "Custom Rows". Zum Testen erstmal alles relativ einfach gehalten (könnte sein dass dem einen oder anderen Teile des Codes bekannt vorkommen ;) )
Das Interessante hierbei ist: Wenn ich die App starte, sieht man zwar, dass die Rows (Reihen?) aufgelistet werden, aber ohne Inhalt. erst wenn ich runter und danach wieder hochscrolle, sieht man den Inhalt. Und daher spontan meine Frage: Wieso :(?
Das gleiche Phänomen tritt auch beim Testen auf dem Handy auf (HTC Magic).


PHP:
package com.android.test;

import java.util.ArrayList;
import java.util.List;

import android.R.string;
import android.app.Activity;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class ComparisonView extends Activity{
   
    private ItemsAdapter adapter;
    
      static final String[] COUNTRIES = new String[] {
            "Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra",
            "Angola", "Anguilla", "Antarctica", "Antigua and Barbuda", "Argentina",
            "Armenia", "Aruba", "Australia", "Austria", "Azerbaijan",
            "Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium",
            "Belize", "Benin", "Bermuda", "Bhutan", "Bolivia",
            "Bosnia and Herzegovina", "Botswana", "Bouvet Island", "Brazil", "British Indian Ocean Territory",
            "British Virgin Islands", "Brunei", "Bulgaria", "Burkina Faso", "Burundi",
            "Cote d'Ivoire", "Cambodia", "Cameroon", "Canada", "Cape Verde",
            "Cayman Islands", "Central African Republic", "Chad", "Chile", "China",
            "Christmas Island", "Cocos (Keeling) Islands", "Colombia", "Comoros", "Congo",
            "Cook Islands", "Costa Rica", "Croatia", "Cuba", "Cyprus", "Czech Republic",
            "Democratic Republic of the Congo", "Denmark", "Djibouti", "Dominica", "Dominican Republic",
            "East Timor", "Ecuador", "Egypt", "El Salvador", "Equatorial Guinea", "Eritrea",
            "Estonia", "Ethiopia", "Faeroe Islands", "Falkland Islands", "Fiji", "Finland",
            "Former Yugoslav Republic of Macedonia", "France", "French Guiana", "French Polynesia",
            "French Southern Territories", "Gabon", "Georgia", "Germany", "Ghana", "Gibraltar",
            "Greece", "Greenland", "Grenada", "Guadeloupe", "Guam", "Guatemala", "Guinea", "Guinea-Bissau",
            "Guyana", "Haiti", "Heard Island and McDonald Islands", "Honduras", "Hong Kong", "Hungary",
            "Iceland", "India", "Indonesia", "Iran", "Iraq", "Ireland", "Israel", "Italy", "Jamaica",
            "Japan", "Jordan", "Kazakhstan", "Kenya", "Kiribati", "Kuwait", "Kyrgyzstan", "Laos",
            "Latvia", "Lebanon", "Lesotho", "Liberia", "Libya", "Liechtenstein", "Lithuania", "Luxembourg",
            "Macau", "Madagascar", "Malawi", "Malaysia", "Maldives", "Mali", "Malta", "Marshall Islands",
            "Martinique", "Mauritania", "Mauritius", "Mayotte", "Mexico", "Micronesia", "Moldova",
            "Monaco", "Mongolia", "Montserrat", "Morocco", "Mozambique", "Myanmar", "Namibia",
            "Nauru", "Nepal", "Netherlands", "Netherlands Antilles", "New Caledonia", "New Zealand",
            "Nicaragua", "Niger", "Nigeria", "Niue", "Norfolk Island", "North Korea", "Northern Marianas",
            "Norway", "Oman", "Pakistan", "Palau", "Panama", "Papua New Guinea", "Paraguay", "Peru",
            "Philippines", "Pitcairn Islands", "Poland", "Portugal", "Puerto Rico", "Qatar",
            "Reunion", "Romania", "Russia", "Rwanda", "Sqo Tome and Principe", "Saint Helena",
            "Saint Kitts and Nevis", "Saint Lucia", "Saint Pierre and Miquelon",
            "Saint Vincent and the Grenadines", "Samoa", "San Marino", "Saudi Arabia", "Senegal",
            "Seychelles", "Sierra Leone", "Singapore", "Slovakia", "Slovenia", "Solomon Islands",
            "Somalia", "South Africa", "South Georgia and the South Sandwich Islands", "South Korea",
            "Spain", "Sri Lanka", "Sudan", "Suriname", "Svalbard and Jan Mayen", "Swaziland", "Sweden",
            "Switzerland", "Syria", "Taiwan", "Tajikistan", "Tanzania", "Thailand", "The Bahamas",
            "The Gambia", "Togo", "Tokelau", "Tonga", "Trinidad and Tobago", "Tunisia", "Turkey",
            "Turkmenistan", "Turks and Caicos Islands", "Tuvalu", "Virgin Islands", "Uganda",
            "Ukraine", "United Arab Emirates", "United Kingdom",
            "United States", "United States Minor Outlying Islands", "Uruguay", "Uzbekistan",
            "Vanuatu", "Vatican City", "Venezuela", "Vietnam", "Wallis and Futuna", "Western Sahara",
            "Yemen", "Yugoslavia", "Zambia", "Zimbabwe"
          };
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
         
           this.adapter = new ItemsAdapter(this, R.layout.row, this.COUNTRIES);

           TextView tv = (TextView)findViewById(R.id.firstText);
           tv.setText( "Anfang" );

           ListView lv = (ListView)findViewById(R.id.list);
           lv.setAdapter(this.adapter);
    }

    private class ItemsAdapter extends ArrayAdapter<String> {

        private String[] items;

        public ItemsAdapter(Context context, int textViewResourceId, String[] items) {
                super(context, textViewResourceId, items);
                this.items = items;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
                View v = convertView;
                if (v == null) {
                        LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v = vi.inflate(R.layout.row, null);
                }
                
                //Item it = this.items.get(position);
                String c = this.items[position];
                if (c != null) {
                        TextView tt = (TextView)findViewById(R.id.toptext);
                        if( tt != null ) {
                            tt.setText( c );
                        }
                }

                return v;
        }
    }


}
In den Logs konnte ich auch nichts entdecken, weiß allerdings auch nicht wirklich, wonach ich bei so einem Problem gucken kann :confused:

Für Anregungen wäre ich sehr dankbar.

Beste Grüße.
 
Hi Andreas,

viele Dank für deine Antwort.
Hat leider auch nicht geklappt.
Hab auch mal die Hintergrund- und Schriftfarbe geändert.
Es ist das gleiche Ergebnis. Was auch sehr merkwürdig ist:
Als erster Eintrag erscheint nicht der erste Wert aus dem Array, sondern der 12. (hier; "Aruba"). Und trotzdem erscheint dann dieser Eintrag auch nochmal an Platz 12 ... sehr verwirrend :eek:

Hier nochmal die vorher/nachher-Bilder:

Direkt nach dem Start:
listview_before.jpg


Nach dem Scrollen (hab solange runtergescrollt, bis die nicht ausgefüllten Reihen nicht mehr zu sehen waren - alle Laender unterhalb der sichtbaren Grenze im Bild, waren beim runterscrollen sofort zu sehen):
listview_after.jpg
 
ich würde vermuten, das liegt an der getView methode. guck dir die nochmal genau an und lass mal das "unnötige" zeug weg, das man nicht unbedingt braucht
 
swordi schrieb:
ich würde vermuten, das liegt an der getView methode. guck dir die nochmal genau an und lass mal das "unnötige" zeug weg, das man nicht unbedingt braucht
Ah vielen Dank. Damit geht eine längere Odyssee zu Ende :)

Hier die Lösung:
PHP:
                if (c != "" && c != null) {
                        TextView tt = (TextView)v.findViewById(R.id.toptext);
                        if( tt != null ) {
                            tt.setText( c );
                        }
                }
Der Unterschied hier ist: Ich suche die Id direkt in dem View v.
Im Nachhinein erscheint es natürlich logisch, sich auf das (die?) View zu beziehen ... aber dadurch dass ich es von einem Beispiel ausm Netz genommen hab, hab ich das die ganze Zeit übersehn :eek:

Danke nochmal,
R3L
 
super, wenns jetzt endlich geht ;)
 

Ähnliche Themen

A
Antworten
10
Aufrufe
1.006
swa00
swa00
5
Antworten
22
Aufrufe
1.367
590239
5
U
  • unerfahrenerAppEntwickler
Antworten
3
Aufrufe
665
swa00
swa00
Zurück
Oben Unten