我正在嘗試創建一個listView
,以便列表中的每個項目由TextView
和一個(或多個)ImageView
組成。使用帶有組合元素的listView
到目前爲止,我設法讓listView
與使用ArrayList<String>
和ArrayAdapter<String>
適配器僅TextViews
項目工作。
有沒有辦法實現我想要的?其他方式會更容易嗎? (就像使用TableRows一樣,但我不確定它們是否可以配置爲具有onClickListener)
我正在嘗試創建一個listView
,以便列表中的每個項目由TextView
和一個(或多個)ImageView
組成。使用帶有組合元素的listView
到目前爲止,我設法讓listView
與使用ArrayList<String>
和ArrayAdapter<String>
適配器僅TextViews
項目工作。
有沒有辦法實現我想要的?其他方式會更容易嗎? (就像使用TableRows一樣,但我不確定它們是否可以配置爲具有onClickListener)
用這樣的佈局創建`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")
您應該使用自定義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
}
您可以通過提供您的ListView的Arraydapter自定義視圖(你可以擴展一個ArrayAdapter來創建你自己的)。在另一個問題上,是的,可以使TableRows可點擊(例如,您可以在XML佈局文件中執行此操作)。
我已經從我的aps上傳了所有可能做你需要的代碼。 下載和使用,只要你喜歡:
https://github.com/billmcnamara/BarcelonaTravelGuide.Android
我去查查看!謝謝 :) –