2012-04-13 19 views
0

Kann mir jemand sagen, wie man eine Gallery in eine ListVview einbetten kann, so dass ich horizontales Scrollen über Bilder innerhalb ListView machen kann?Einbetten einer Galerie in eine ListView?

+1

Sie können keine 'Gallery' in einer' ListView' platzieren. – adneal

+0

ya ich stimme dir zu ... wirst du mir irgendeine Lösung dafür, wie man das gleiche erreichen ... meins jede Daten ist dynamisch. – KKC

Antwort

0

Benötigen Sie eine Listview? Vielleicht könnten Sie ein LinearLayout (vertikal) in einem ScrollView platzieren?

+0

Ich habe versucht, lineare Layout und Bildlaufansicht zu verwenden, aber es ist nicht nützlich für meine Anforderung ... tatsächlich nehme ich Daten aus dem Feed, so dass mir alles dynamisch ist. – KKC

+0

Ich hatte nie viel Erfolg mit ListView für komplexe Layout-Anforderungen. Ich finde, dass die Verwendung von ScrollView und LinearLayout zum Halten meiner Daten flexibler ist. Mit diesem Ansatz können Sie keine Adapter verwenden, wie Sie es normalerweise tun würden, aber sobald Sie Ihre eigenen Datenverarbeitungs-Code-Layout-Probleme implementieren, wird es leichter, mit ihnen umzugehen. –

+0

Vielen Dank für Ihren Vorschlag, was auch immer Sie mir gesagt haben, ich stimme Ihnen vollkommen zu ... aber da meine Daten dynamisch sind, weiß ich nicht, wie viele Daten kommen werden. Also dachte ich über Listview nach, wie auch immer Sie mir eine andere Lösung geben das Gleiche tun. – KKC

3

Überprüfen Sie this Beitrag, es hat für mich funktioniert.

Mein Setup ist wie folgt:

  • ich eine ListActivity haben, die eine ArrayAdapter verwendet es mit Daten zu füllen.
  • Meine XML-Ressource list_item enthält eine ImageView, TextView und eine Galerie.
  • Ich füge eine OnClickListener zu der Zeile (wie gewohnt Listenelement Klicks zu handhaben.)
  • Dann habe ich den Adapter für die Galerie
  • ich eine GestureListener zur Galerie hinzufügen, die
  • I Griffe klauen ein OnItemClickListener zur Galerie hinzufügen Bilder in der Galerie

in meinem ArrayAdapter ich folgend zu handhaben klicken:

private static final int SWIPE_MAX_OFF_PATH = 250; 
private GestureDetector gestureDetector; 
private OnTouchListener gestureListener; 
private Gallery picGallery; 

... 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    View row = convertView; 

    /* Holder pattern here, commented out for clarity */ 

    // We need to set the onClickListener here to make sure that 
    // the row can also be clicked, in addition to the gallery photos 
    row.setOnClickListener(new MyOnClickListener(context,position)); 

    // Set the adapter for the gallery 
    picGallery = (Gallery) row.findViewById(R.id.gallery); 
    picGallery.setAdapter(
       new MyGalleryAdapter(/* some input data here to populate the gallery */)); 

    // GestureDetector to detect swipes on the gallery 
    gestureDetector = new GestureDetector(new MyGestureDetector()); 
    gestureListener = new View.OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 
      return gestureDetector.onTouchEvent(event); 
     } 
    }; 

    // Detect clicking an image 
    picGallery.setOnItemClickListener(new MyOnItemClickListener(context)); 

    // Detect swipes 
    picGallery.setOnTouchListener(gestureListener); 

    return row; 
} 

... 

private class MyGestureDetector extends SimpleOnGestureListener { 
    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
     try { 
      if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) 
       return false; 
     } catch (Exception e) { 
      // nothing 
     } 
     return false; 
    } 

} 

... 

private class MyOnItemClickListener implements OnItemClickListener{  
    private Context context; 

    public MyOnItemClickListener(Context context){ 
     this.context = context; 
    } 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, 
      long id) { 
     Intent intent = new Intent(context, PhotoDetailActivity.class); 
     intent.putExtra("id", id); 
     context.startActivity(intent); 

    } 

}