Hiho, ich habe folgenden Code, der mir aus einer ArrayList mit eigenen Objekten (vom Typ "Film") die Oberfläche gestaltet. Dazu habe ich ein Linearlayout, das dann pro Eintrag der Liste, ein Custom View hinzugefügt bekommt. Dann werden auch gleich Name, Beschreibung, Genre und Bewertung gesetzt und angezeigt. Mein Problem: Das dauert einfach an die 2-3 Sekunden. Und das auf meinem Galaxy S4. Ich habe nun schon gelesen, dass man das Anzeigen eines "Wartebildschirmes" über einen ProgressDialog regeln kann. Leider bekomme ich es beim besten Willen nicht hin. Ich glaube mein Problem ist, dass nich das Berechnen irgendwelcher Daten lange dauert, sondern das erzeugen der Custom Views. Geht es denn dann überhaupt mit dem ProgressDialog? Ich bekomms jedenfalls nicht hin. Hat jemand eine Idee? Hier ist der Code, der aufgerufen wird, um mir meine Custom Views ("eintrag") zu erzeugen und am Ende dem LinearLayout("galerieeintraege") hinzuzufügen
Java:
private void DatenLaden()
{
try{
int a = 0;
LinearLayout layout = (LinearLayout)findViewById(R.id.galerieeintraege);
layout.removeAllViews();
for (Film film : filme)
{
if(film.getName() != null && filterkriterium == "Name")
if(!film.getName().toLowerCase().contains(filterWert.toLowerCase()))
continue;
if(film.getBeschreibung() != null && filterkriterium == "Beschreibung")
if(!film.getBeschreibung().toLowerCase().contains(filterWert.toLowerCase()))
continue;
if(film.getGenre() != null && filterkriterium == "Genre")
if(!film.getGenre().toLowerCase().contains(filterWert.toLowerCase()))
continue;
if(filterkriterium == "Bewertung")
{
if(film.getBewertung() < Float.parseFloat(filterWert))
continue;
}
a = a + 1;
eintrag eintrag = new eintrag(Galerie.this);
eintrag.setName(a + ".) " + film.getName());
eintrag.setBeschreibung(film.getBeschreibung());
eintrag.setGenre(film.getGenre());
eintrag.setBewertung(film.getBewertung());
eintrag.setStrichcode(film.getStrichcode());
ImageView imageView = eintrag.getBildView();
File anzeigebild = new File(root.getAbsolutePath() + "/mnt/sdcard/FilmBilder/" + film.getStrichcode() + ".jpg");
if(anzeigebild.exists())
imageView.setImageBitmap(BitmapFactory.decodeFile(anzeigebild.getAbsolutePath()));
imageView.setOnTouchListener(new OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
return false;
}
});
imageView.setOnLongClickListener(new OnLongClickListener() {
public boolean onLongClick(View v) {
// TODO Auto-generated method stub
EintragGewaehlt( (((eintrag) v.getParent().getParent().getParent().getParent())).getStrichcode());
;
return true;
}
});
layout.addView(eintrag);
}
}
catch(Exception e)
{
String a = "";
}
}