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

Horizontaler ListView

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von druber, 21.09.2010.

  1. druber, 21.09.2010 #1
    druber

    druber Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    21.09.2010
    Hallo!

    Ich möchte einen horizontalen Listview implementieren. Jede Zelle sollte ein Image beheinhalten und man sollte aben nur eine zeile sehen und von links nach rechts navigieren können. Zusätzlich möchte ich die Daten natürlich über einen Adapter binden.

    Wie mache ich das? Muss ich mir dazu einen eigenen AdapterView schreiben?
     
  2. BenOtto, 21.09.2010 #2
    BenOtto

    BenOtto Android-Hilfe.de Mitglied

    Beiträge:
    141
    Erhaltene Danke:
    15
    Registriert seit:
    30.08.2010
    Ich glaube nicht, dass die ListView für vertikale (du meinst doch bestimmt vertikal, oder?) Listen ausgelegt ist. Besser für dich wäre sowas wie eine Form von ImageView / ScrollView bzw einen ImageSwitcher. Die sind dazu gedacht sowas ähnliches zu veranstalten
     
  3. swordi, 21.09.2010 #3
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    horizontalscrollview meinst du eher denke ich

    gibts aber eher nicht mit adapter
     
  4. BenOtto, 21.09.2010 #4
    BenOtto

    BenOtto Android-Hilfe.de Mitglied

    Beiträge:
    141
    Erhaltene Danke:
    15
    Registriert seit:
    30.08.2010
    Was hast du denn vor?
     
  5. druber, 21.09.2010 #5
    druber

    druber Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    21.09.2010
    Nein ich meine schon horizontal.

    Im Prinzip sollte es so wie die erste Zeile aussehen (die zweite ist einfach eine Gallery). Images hintereinander und man kann von links nach rechts scrollen:

    [​IMG]

    Das XML für die erste Zeile sieht so aus:

    Code:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
        <ScrollView 
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:scrollbars="horizontal|vertical">
            <HorizontalScrollView 
                android:layout_height="fill_parent"
                android:layout_width="wrap_content">
                <LinearLayout 
                    android:id="@+id/list"
                    android:layout_width="wrap_content"
                    android:orientation="horizontal"
                    android:layout_height="fill_parent">
                    <ImageView
                        android:id="@+id/image_scroll"
                        android:layout_width="70dip"
                        android:layout_height="70dip" 
                        android:src="@drawable/stub" 
                        android:scaleType="centerCrop" />
                    <ImageView
                        android:id="@+id/image_scroll"
                        android:layout_width="70dip"
                        android:layout_height="70dip" 
                        android:src="@drawable/stub" 
                        android:scaleType="centerCrop" />
                    <ImageView
                        android:id="@+id/image_scroll"
                        android:layout_width="70dip"
                        android:layout_height="70dip" 
                        android:src="@drawable/stub" 
                        android:scaleType="centerCrop" />
                    <ImageView
                        android:id="@+id/image_scroll"
                        android:layout_width="70dip"
                        android:layout_height="70dip" 
                        android:src="@drawable/stub" 
                        android:scaleType="centerCrop" />
                    <ImageView
                        android:id="@+id/image_scroll"
                        android:layout_width="70dip"
                        android:layout_height="70dip" 
                        android:src="@drawable/stub" 
                        android:scaleType="centerCrop" />
                    <ImageView
                        android:id="@+id/image_scroll"
                        android:layout_width="70dip"
                        android:layout_height="70dip" 
                        android:src="@drawable/stub" 
                        android:scaleType="centerCrop" />
                </LinearLayout>
            </HorizontalScrollView>
        </ScrollView>
    </LinearLayout>
    
    Jetzt will ich aber nicht, dass die ImageViews in dem XML fix codiert sind, sondern dass die über einen Adapter reinlaufen - ähnlich wie bei einem ListView.

    Also ich will dem Adapter eine Liste von Image-URLs übergeben und der soll mir dann den View richtig setzen.

    Also da muss ich mir jetzt selbst einen AdapterView schreiben?
     
  6. BenOtto, 21.09.2010 #6
    BenOtto

    BenOtto Android-Hilfe.de Mitglied

    Beiträge:
    141
    Erhaltene Danke:
    15
    Registriert seit:
    30.08.2010
    Warum nimmst du nicht die Gallery?

    Du willst also die Images im Code dynamisch laden? Falls ja würde ich die ScrollView und LinearLayout im XML definieren und die Bilder im Code dazuadden.
    Code:
    LinearLayout ll = findViewById(R.id.list);
    ImageView iv1 = new ImageView...
    ...
    ll.add(iv1);
    ...
    
    Eine ListView ist eher dafür gedacht mit den Daten in der View noch etwas anzufangen.
     
  7. druber, 21.09.2010 #7
    druber

    druber Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    21.09.2010
    Warum ich nicht die Gallery nehme? Weil da immer ein Image zentriert in der Mitte liegt (oder halt links oder recht - je nach der Einstellung). Man soll aber nur durchscrollen können....

    OK, ein Adapter wäre zwar sauberer glaube ich, aber dann muss ich die Bilder halt dynamisch hinzufügen.
     
  8. BenOtto, 21.09.2010 #8
    BenOtto

    BenOtto Android-Hilfe.de Mitglied

    Beiträge:
    141
    Erhaltene Danke:
    15
    Registriert seit:
    30.08.2010
    Der Adapter transferiert zwischen einer View und den darzustellenden Daten. Du kannst natürlich auch einen Adapter bauen, der deine Daten (also die Pfade zum Bild) in einer ImageView unterbringt. Aber das kann man ja auch direkt tun, wenn zu dem Bild nichts dazukommt.
     
  9. druber, 21.09.2010 #9
    druber

    druber Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    21.09.2010
    Naja ich will ja das MVC-Prinzip einhalten. Mit den Adaptern ist das ja quasi klar -> Modeller = Adapter, Viewer = Views, Controller = Activities.

    Wo soll ich da nun am besten den Code hingeben:

    Code:
    LinearLayout ll = findViewById(R.id.list);
    ImageView iv1 = new ImageView...
    ...
    ll.add(iv1);
    ...
    
    Gehört ja quasi nicht mehr zum controller, sondern zum modeller?
     
  10. BenOtto, 21.09.2010 #10
    BenOtto

    BenOtto Android-Hilfe.de Mitglied

    Beiträge:
    141
    Erhaltene Danke:
    15
    Registriert seit:
    30.08.2010
    Woher ergeben sich denn deine Bilder? Sind die beim Start der Activity bekannt? Dann bei onCreate()

    Ich würde das so sehen:
    Model = Deine Bilder
    Controller = Deine Activity
    View = Das LinearLayout
     
  11. druber, 21.09.2010 #11
    druber

    druber Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    21.09.2010
    Die Bilder sind in einer ArrayList und werden durch einen XML-Parser gesetzt. Der Parser ist in einer eigenen Klasse, der Aufruf des Parser erfolgt aber in der Activity.
     
  12. BenOtto, 21.09.2010 #12
    BenOtto

    BenOtto Android-Hilfe.de Mitglied

    Beiträge:
    141
    Erhaltene Danke:
    15
    Registriert seit:
    30.08.2010
    In einem eigenen Thread?
     
  13. druber, 21.09.2010 #13
    druber

    druber Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    21.09.2010
    Nein, sollte man aber vielleicht machen, also das XML parsen in einen eigenen Thread?
     
  14. BenOtto, 21.09.2010 #14
    BenOtto

    BenOtto Android-Hilfe.de Mitglied

    Beiträge:
    141
    Erhaltene Danke:
    15
    Registriert seit:
    30.08.2010
    Da das ein längerer Prozess sein kann sollte man das auslagern. Also ich würde kenntlich machen, dass die Bilder noch geladen werden (ProgressBar, evtl auch in der Zeile, in der das AppLabel steht) und dann den Thread starten. Wenn das parsen beendet ist rufst du aus dem XMLParse-Thread einen Handler auf, den du in der Activity erzeugt hast und übergibst ihm die anzuzeigenden Bilder. Der erzeugt sie dann und hängt sie in die ScrollView.
     

Diese Seite empfehlen