主布局文件(只有一个ListView)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</RelativeLayout>
自定义布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/image_view"
android:contentDescription="@string/desc"
android:layout_width="120dp"
android:layout_height="120dp"
android:src="@drawable/duck" />
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/image_view"
/>
<TextView
android:id="@+id/describe"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/image_view"
android:layout_below="@id/title"
android:ellipsize="end"
android:maxLines="2"
/>
<TextView
android:id="@+id/price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/describe"
android:layout_toRightOf="@id/image_view"
/>
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/image_view"
android:layout_alignParentRight="true"
android:background="@null"
android:focusable="false"
android:text="@string/shopping_cart" />
</RelativeLayout>
MainActivity.java
package com.example.list_view4_9;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private ListView listView;
private List<Food> list = new ArrayList<Food>();
private Button bt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.list_view);
initFood();
MyAdapter ma = new MyAdapter();
listView.setAdapter(ma);
listView.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> arg0,View arg1,int arg2,long arg3)
{
Food f = list.get(arg2);
Toast.makeText(MainActivity.this, f.getTitle(), Toast.LENGTH_LONG).show();
}
});
}
//初始化数据
private void initFood(){
for(int i=0;i<10;i++) {
Food f = new Food();
f.setTitle("麻辣鸭脖"+i);
f.setDesc("精品鸭脖选择六和品牌的一级樱桃谷鸭,无淤血,无表皮破损,有我们的专业的采购员精选:重量40-50g,每千克为6根,长度24cm每根,比普通鸭脖含肉量更多。");
f.setPrice("¥10.0");
list.add(f);
}
}
class MyAdapter extends BaseAdapter{
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int arg0, View convertView, ViewGroup arg2)
{
// TODO Auto-generated method stub
View view;
Food f = list.get(arg0);
//创建一个ViewHolder对象
final ViewHolder viewHolder;
//convertView参数用于将之前加载好的布局进行缓存,以便重用。
//如果convertView不为null直接进行重用。提高了运行效率
if(convertView==null)
{
view =View.inflate(MainActivity.this, R.layout.layout_food, null);
//将控件实例存放在viewHolder里面
viewHolder = new ViewHolder();
viewHolder.tv_desc= (TextView)view.findViewById(R.id.describe);
viewHolder.tv_price= (TextView)view.findViewById(R.id.price);
viewHolder.tv_title= (TextView)view.findViewById(R.id.title);
//将ViewHolder对象存储在view中
view.setTag(viewHolder);
}
else
{
view = convertView;
viewHolder = (ViewHolder) view.getTag();
}
viewHolder.tv_title.setText(f.getTitle());
viewHolder.tv_desc.setText(f.getDesc());
viewHolder.tv_price.setText(f.getPrice());
bt = (Button) view.findViewById(R.id.button);
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this,viewHolder.tv_title.getText()+""+viewHolder.tv_price.getText()+viewHolder.tv_desc.getText(), Toast.LENGTH_LONG).show();
}
});
return view;
}
}
//用于对控件实例进行缓存
class ViewHolder
{
TextView tv_title,tv_price,tv_desc;
}
}
运行效果图