2010-12-03 5 views
0

J'essaye de charger une liste d'images d'un tableau. J'ai les images dans la liste. Maintenant, je dois ajouter un texte pour chaque image de la liste. Quelqu'un peut il m'aider avec ça? Je suis nouveau sur Android.Comment utiliser listView personnalisé?

public class EfficientAdapter extends BaseAdapter { 
    public EfficientAdapter(Context c) { 
     mContext = c; 
    } 

    public int getCount() { 
     return mImageIds.length; 
    } 

    public Object getItem(int position) { 
     return position; 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView i = new ImageView(mContext); 
     i.setImageResource(mImageIds[position]); 
     i.setScaleType(ImageView.ScaleType.FIT_END); 
     i.setLayoutParams(new ListView.LayoutParams(60, 60)); 
     return i; 
    } 

    private Context mContext; 
    private Integer[] mImageIds = { R.drawable.video3, R.drawable.video5, R.drawable.music2, }; 
} 

Ceci est mon code où j'ai chargé la liste d'images d'un tableau. S'il vous plaît aidez-moi avec ce code.

Répondre

1

Vous pouvez faire quelque chose comme

public View getView(int position, View convertView, ViewGroup parent) 
{ 
    // Create a linear layout to hold other views 
    LinearLayout oItemViewLayout = new LinearLayout(mContext); 

    // ImageView 
    ImageView i = new ImageView(mContext); 
    i.setImageResource(mImageIds[position]); 
    i.setScaleType(ImageView.ScaleType.FIT_END); 
    i.setLayoutParams(new ListView.LayoutParams(60,60)); 

    // Add ImageView to item view layout 
    oItemViewLayout.addView(i); 

    // TextView 
    TextView lblTextView = new TextView(mContext); 
    lblTextView.setText(mImageNames[position]); 

    // Add ImageView to item view layout 
    oItemViewLayout.addView(lblTextView); 

    return oItemViewLayout; 
} 

Si vous avez également défini un tableau de chaînes pour contenir les noms des images, peut-être comme

private String[] mImageNames = {"title of video3", "video5", "music2",}; 

Il serait encore plus facile si vous créez une disposition pour le ListItem et que vous le chargez pour créer la vue à la place

Cr eate une disposition appelée dire « mylistview.xml »

<?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="wrap_content" 
    android:orientation="vertical" > 
      <ImageView 
       android:id="@+id/ITEMVIEW_imgImage" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       /> 
      <TextView 
       android:id="@+id/ITEMVIEW_lblText" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       /> 
</LinearLayout> 

Vous pouvez ensuite faire la méthode getView() comme celui-ci

public View getView(int position, View convertView, ViewGroup parent) 
{ 
    // Create a new view or recycle one if available 
    View oItemViewLayout; 
    if (convertView == null) 
    { 
     // New view needs to be created 
     oItemViewLayout = (View)LayoutInflater.from(mContext).inflate(R.layout.mylistview, parent, false); 
    } 
    else 
    { 
     // Recycle an existing view 
     oItemViewLayout = (View)convertView; 
    } 

    // ImageView 
    ImageView i = (ImageView)oItemViewLayout.findViewById(R.id.ITEMVIEW_imgImage); 
    i.setImageResource(mImageIds[position]); 

    // TextView 
    TextView lblTextView = (TextView)oItemViewLayout.findViewById(R.id.IITEMVIEW_lblText); 
    lblTextView.setText(mImageNames[position]); 

    return oItemViewLayout; 
} 

Ce ne sera pas seulement la vie plus facile en vous permettant de concevoir la vue en XML, mais il sera également plus efficace parce que vous allez recycler les vues qui ont disparu de l'écran mais qui sont toujours en mémoire parce que vous saisissez l'instance convertView lorsqu'il y en a une.

+0

Votre réponse est exactement ce que je cherchais. Merci –

Questions connexes