2012-11-08 27 views
0

我正在嘗試創建一個listView,以便列表中的每個項目由TextView和一個(或多個)ImageView組成。使用帶有組合元素的listView

到目前爲止,我設法讓listView與使用ArrayList<String>ArrayAdapter<String>適配器僅TextViews項目工作。

有沒有辦法實現我想要的?其他方式會更容易嗎? (就像使用TableRows一樣,但我不確定它們是否可以配置爲具有onClickListener)

回答

1

用這樣的佈局創建`list_items.xml`:

<LinearLayout 
    android:orientation="horizontal" 
    [...] 
    <ImageView 
     [...] 
     android:id="@+id/myimage"/> 
    <TextView 
     [...]    
     android:id="@+id/mytext"/> 
</LinearLayout> 

然後創建一個BaseAdapter:

class MyAdapter extends BaseAdapter { 

    private Context context; 
    private LayoutInflater inflater; 
    private ViewHolder holder; 
    private ArrayList<HashMap<String, String>> data; 

    public MyAdapter(Context context, ArrayList<HashMap<String, String>> data) { 
     this.context = context; 
     this.data = data; 
     inflater = LayoutInflater.from(context); 
    } 

    // Below the Magic 
    public View getView(int position, View convertView, ViewGroup parent) { 
     inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 

      if(convertView == null || convertView.getTag() == null) { 
       // Here you load the list_items.xml an inflate your Layout with it 
       convertView = inflater.inflate(R.layout.list_items, null); 

       holder = new ViewHolder(); 
       holder.text = (TextView) convertView.findViewById(R.id.mytext); 
       holder.image = (ImageView) convertView.findViewById(R.id.myimage); 

       convertView.setTag(holder); 

      } else {    
       holder = (ViewHolder) convertView.getTag(); 
      } 

      // We get the HashMap for our current Position in the ListView 
      row = data.get(position); 

      if(row != null) { 
       holder.text.setText(row.get("test")); 
       // Below could be setImageBitmap, setImageResource,... 
       // depends on how you get your image 
       holder.image.setImageBitmap(getImage(row.get("image")); 
      } 

      return convertView; 
     } 

     class ViewHolder { 
      TextView text; 
      ImageView image; 
     } 

} 

public getImage(String image) { 
     // Get your image from where you want it SD, drawable, internet) 
} 

的稱呼它:

MyAdapter myAdapter = new MyAdapter(this, data); 
myListView.setAdapter(myAdapter); 

我我假設你將數據傳遞給一個包含每行HashMap的ArrayList:

#ListItem1 = data(0) - data.get(0).get("title"), data.get(0).get("image") 
    #ListItem2 = data(1) - data.get(1).get("title"), data.get(1).get("image") 
2

您應該使用自定義List視圖。 http://www.androidpeople.com/android-custom-listview-tutorial-part-1。看看鏈接。

@Override 
    public int getItemViewType(int position) 
    { 
    int type; 
    if (ID.get(position)== 0){ 
    type = TYPE_ITEM1; //type 0 for image 
    } 
    else if (ID.get(position) == 1){ 
    type = TYPE_ITEM2; //type 1 for text 
    }else { 
    type = TYPE_ITEM3; //type 2 for videos 
} 
return type; 
} 
@Override 
    public int getViewTypeCount() { 
return 3; //three different layouts to be inflated 
} 
1

您可以通過提供您的ListView的Arraydapter自定義視圖(你可以擴展一個ArrayAdapter來創建你自己的)。在另一個問題上,是的,可以使TableRows可點擊(例如,您可以在XML佈局文件中執行此操作)。