Android之--自定义ListView

来源:互联网 发布:spss如何将数据分组 编辑:程序博客网 时间:2024/06/08 08:48

Android系统自带的ListView控件,能展示的内容有限,往往达不到实际项目开发的要求。想实现图文混合显示,需要自定义ListView并重写Adapter。
本文自定义ListView来展示水果图片、名称及价格

1、定义ListView要展示的fruit类

public class Fruit {    private  String name;    private  double price;    private int imageID;    public double getPrice() {        return price;    }    public String getName() {        return name;    }    public int getImageID() {        return imageID;    }    public Fruit(String name,int id,double price) {        this.name = name;        this.imageID = id;        this.price = price;    }    public Fruit() {}}

2、ListView需要Adapter填充内容。这里继承ArrayAdapter,自定义适配器类FruitAdapter

public class FruitAdapter extends ArrayAdapter<Fruit> {    int resourceID;    public FruitAdapter(Context context, int textViewResourceId,            List<Fruit> objects) {        super(context, textViewResourceId, objects);        resourceID = textViewResourceId;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        Fruit fruit = getItem(position);        View view ;        ViewHolder viewHolder;        //view对象为空时,给它赋值。避免每次findViewById来提高ListView的效率        if (convertView == null) {            view = LayoutInflater.from(getContext()).inflate(resourceID, null);            viewHolder = new ViewHolder();            viewHolder.fruitimage = (ImageView)view.findViewById(R.id.fruit_image);            viewHolder.fruitname  = (TextView)view.findViewById(R.id.fruit_name);            viewHolder.fruitprice = (TextView)view.findViewById(R.id.fruit_price);            view.setTag(viewHolder);    //viewholder 存储在view中        }else {            view = convertView;            viewHolder = (ViewHolder)view.getTag();        }        //给ListView中的每一项赋值        viewHolder.fruitimage.setImageResource(fruit.getImageID());        viewHolder.fruitname.setText(fruit.getName());        viewHolder.fruitprice.setText(String.valueOf(fruit.getPrice()));        return view;    }    class ViewHolder{        ImageView fruitimage;        TextView fruitname,fruitprice;    }}

3、ListView项目的布局xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"     >    <ImageView        android:id="@+id/fruit_image"        android:layout_width="75sp"        android:layout_height="75sp" />    <TextView        android:id="@+id/fruit_name"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerVertical="true"        android:layout_marginLeft="80dip"        android:textSize="20sp"        android:text="apple"        />    <TextView        android:id="@+id/fruit_price"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerVertical="true"        android:layout_alignParentRight="true"        android:layout_marginRight="70dip"        android:text="单价:"        android:textSize="20sp"        /></RelativeLayout>

在Activity中显示

public class ListViewActivity extends Activity {    private List<Fruit> fruitlist = new ArrayList<Fruit>();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        InitFruits();        FruitAdapter adapter = new FruitAdapter(ListViewActivity.this, R.layout.fruit, fruitlist);        ListView list = (ListView)findViewById(R.id.listView);        list.setAdapter(adapter);    }    };    private void InitFruits() {        // TODO Auto-generated method stub        fruitlist.add(new Fruit("Apple", R.drawable.apple512,1.26));        fruitlist.add(new Fruit("Banana", R.drawable.banana512,2.2));        fruitlist.add(new Fruit("Orange", R.drawable.orange512,5.0));        fruitlist.add(new Fruit("Lemon", R.drawable.lemon512,4.3));        fruitlist.add(new Fruit("Pear", R.drawable.pear512,3.5));        fruitlist.add(new Fruit("Tomato", R.drawable.tomato512,2.6));        fruitlist.add(new Fruit("Kiwi", R.drawable.kiwi512,1.9));        fruitlist.add(new Fruit("Peach", R.drawable.peach512,5));        fruitlist.add(new Fruit("Cherry", R.drawable.cherry512,10));    }

实际效果:
这里写图片描述

待续:
当拖动listview项时,要因图片显示过多,内在溢出程序异常退出,这个问题未解决

0 0
原创粉丝点击