ListView的自定制

(1)创建项目,在res/drawable_hdpi文件夹中导入图片,在activity_main.xml文件中添加ListView控件,添加代码如下

<ListView
  android:id="@+id/list_view"
  android:layout_width="match_parent"
  android:layout_height="match_parent">
</ListView>

(2)给ListView的单元格自定制布局文件,在res/layout目录下新建文件fruit_item.xml文件,代码如下

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/fruit_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <TextView
        android:id="@+id/fruit_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginLeft="10dip" />

</LinearLayout>

(3)定义一个实体类作为ListView适配器的适配类型,新建类Fruit,代码如下

public class Fruit {

	private String name;

	private int imageId;

	public Fruit(String name, int imageId) {
		this.name=name;
		this.imageId=imageId;
	}

	public String getName() {
		return name;
	}

	public int getImageId() {
		return imageId;
	}
}

(4)自定义一个适配器,继承自ArrayAdapter,泛型指定为Fruit,新建类FruitAdapter,代码如下

public class FruitAdapter extends ArrayAdapter<Fruit> {
	private 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) {
		// TODO Auto-generated method stub
		Fruit fruit=getItem(position);//获取当前项的Fruit实例
		View view;
		ViewHolder viewHolder;
		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);
			view.setTag(viewHolder);//将ViewHolder存储在View中
		}else {
			view=convertView;
			viewHolder=(ViewHolder)view.getTag();//重新获取ViewHolder
		}
		viewHolder.fruitImage.setImageResource(fruit.getImageId());
		viewHolder.fruitName.setText(fruit.getName());
		return view;
	}
	class ViewHolder{
		ImageView fruitImage;
		TextView fruitName;
	}
}

  这里的convertView用于将之前加载好的布局进行缓存,便于之后的重用。上述代码表示如果convertView为空则利用LayoutInflater加载布局,不为空,则直接对convertView进行重用,这样就可以不用每次滑动都重新加载一遍布局。

  这里我们还新增了一个内部类ViewHolder,convertView为空的时候创建ViewHolder对象,并将控件的实例都存放到ViewHolder里,然后调用setTag方法将ViewHolder对象存储在View中,不为空时则利用getTag将ViewHolder取出。这样缓存控件的实例后就没必要每次都通过findViewById()方法来获取实例。

  这两步都起到了优化的作用,提高了ListView的运行效率。

(5)修改MainActivity中的代码,代码如下

public class MainActivity extends Activity {
	private List<Fruit> fruitList=new ArrayList<Fruit>();

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initFruit();//初始化数据
		FruitAdapter adapter=new FruitAdapter(MainActivity.this, R.layout.fruit_item, fruitList);
		ListView listView=(ListView)findViewById(R.id.list_view);
		listView.setAdapter(adapter);
		listView.setOnItemClickListener(new OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView<?> parent, View view, int position, long id){
				Fruit fruit=fruitList.get(position);
				Toast.makeText(MainActivity.this, fruit.getName(), Toast.LENGTH_SHORT).show();
			}
		});
	}

	private void initFruit() {
		Fruit fruit1=new Fruit("fruit1", R.drawable.a1);
		fruitList.add(fruit1);
		Fruit fruit2=new Fruit("fruit2", R.drawable.a2);
		fruitList.add(fruit2);
		Fruit fruit3=new Fruit("fruit3", R.drawable.a3);
		fruitList.add(fruit3);
		Fruit fruit4=new Fruit("fruit4", R.drawable.a4);
		fruitList.add(fruit4);
		Fruit fruit5=new Fruit("fruit5", R.drawable.a5);
		fruitList.add(fruit5);
		Fruit fruit6=new Fruit("fruit6", R.drawable.a6);
		fruitList.add(fruit6);
		Fruit fruit7=new Fruit("fruit7", R.drawable.a7);
		fruitList.add(fruit7);
		Fruit fruit8=new Fruit("fruit8", R.drawable.a8);
		fruitList.add(fruit8);
		Fruit fruit9=new Fruit("fruit9", R.drawable.a9);
		fruitList.add(fruit9);
		Fruit fruit10=new Fruit("fruit10", R.drawable.a10);
		fruitList.add(fruit10);
		Fruit fruit11=new Fruit("fruit11", R.drawable.a11);
		fruitList.add(fruit11);
		Fruit fruit12=new Fruit("fruit12", R.drawable.a12);
		fruitList.add(fruit12);
		Fruit fruit13=new Fruit("fruit13", R.drawable.a13);
		fruitList.add(fruit13);
		Fruit fruit14=new Fruit("fruit14", R.drawable.a14);
		fruitList.add(fruit14);
	}
}

运行结果如下:

从上述步骤中不难看出,我们只要修改第(2)步的文件就可以定制各种各样的界面了

时间: 2024-08-27 22:59:39

ListView的自定制的相关文章

android:定制 ListView 的界面

只能显示一段文本的 ListView 实在是太单调了,我们现在就来对 ListView 的界面进行 定制,让它可以显示更加丰富的内容. 首先需要准备好一组图片,分别对应上面提供的每一种水果,待会我们要让这些水果名 称的旁边都有一个图样. 接着定义一个实体类,作为 ListView 适配器的适配类型.新建类 Fruit,代码如下所示: public class Fruit { private String name; private int imageId; public Fruit(String

定制ListView的界面

内容摘自<第一行代码>——郭霖 只能显示一段文本的ListView实在是太单调了,我们现在就来对ListView的界面进行定制,让它可以显示更加丰富的内容.首先需要准备好一组图片,分别对应上面提供的每一种水果,待会我们要让这些水果名称的旁边都有一个图样.接着定义一个实体类,作为ListView适配器的适配类型.新建类Fruit,代码如下所示: public class Fruit { private String name; private int imageId; public Fruit(

初识ListView - 定制ListView - 提升ListView运行效率

ListView绝对可以称得上是 Android 中最常用的控件之一,几乎所有的应用程序都会用到它.由于手机屏幕空间都比较有限,能够一次性在屏幕上显示的内容并不多,当我们的程序中有大量的数据需要展示的时候,就可以借助 ListView来实现.ListView允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内,同时屏幕上原有的数据则会滚动出屏幕.相信你其实每天都在使用这个控件,比如查看手机联系人列表,翻阅微博的最新消息等等.不过比起前面介绍的几种控件,ListView的用法也相对复杂了很多.

ListView使用简介 (留下足迹以供后续参考)

ListView 绝对可以称得上是Android 中最常用的控件之一,几乎所有的应用程序都会用到它.由于手机屏幕空间都比较有限,能够一次性在屏幕上显示的内容并不多,当我们的程序中有大量的数据需要展示的时候,就可以借助ListView 来实现.ListView 允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内,同时屏幕上原有的数据则会滚动出屏幕.相信你其实每天都在使用这个控件,比如查看手机联系人列表,翻阅微博的最新消息等等.不过比起前面介绍的几种控件,ListView 的用法也相对复杂了很

Android入门(五)UI-单位与尺寸、ListView

原文链接:http://www.orlion.ga/453/ 一.单位与尺寸 布局文件中一共有以下单位供选择:px,pt,dp,sp px:是像素,屏幕中可见的最小元素单位. pt:是磅,1磅等于1/72英寸,一般pt都会作为字体的单位来使用. 同样px数的控件在不同分辨率上的手机屏幕上的效果是不同的,pt与px的情况差不多 dp:是密度无关像素,也称为dip,与px相比,它在不同密度的屏幕中的显示比例保持一致 sp:是可伸缩像素,采用了与dp同样的设计理念,解决了文字大小的适配问题 andro

最常用和最难用的控件--ListView(Android第一行代码)

由于手机屏幕空间都比较有限,能够一次性在屏幕上显示的内容并不多,当我们的程序中有 大量的数据需要展示的时候,就可以借助 ListView 来实现.ListView 允许用户通过手指上下 滑动的方式将屏幕外的数据滚动到屏幕内,同时屏幕上原有的数据则会滚动出屏幕. 1.ListView 的简单用法首先新建一个 ListViewTest 项目,并让 ADT 自动帮我们创建好活动.然后修改activity_main.xml 中的代码,如下所示: <LinearLayout xmlns:android=&qu

ListView学习

ListView 学习 ListView 允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内,同时屏幕上原有的数据会滚动出屏幕. 一个最简单的ListView 布局 <ListView android:id="@+id/list_view" android:layout_width="match_parent" android:layout_height="match_parent"> MainActivity中代码 //定义一

&lt;Android基础&gt;(五) UI开发 Part 2

ListView 1)ListView的简单用法 2)定制ListView界面 3)提升ListView的运行效率 4)ListView的点击事件 3.5 ListView 3.5.1 ListView的简单用法 1.新建项目,修改activity_main.xml中的代码,插入<ListView>控件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=

android edittext+listview进阶 实现搜索listview中的内容 定制自己的过滤器

上一次直接使用的是arrayadapter 以及 系统自带的simple_list1布局文件.但是开发中,我们基本是不会用到那么简单的cell的,下面就来说说如何定制自己的过滤器,让他想搜索什么内容就搜索什么内容 效果图: listview_cell布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.c