Android中的ListView控件

ListView 绝对能够称得上是 Android 中最经常使用的控件之一, 当咱们的程 序中有大量的数据须要展现的时候,就能够借助 ListView 来实现。ListView 容许用户经过手 指上下滑动的方式将屏幕外的数据滚动到屏幕内,同时屏幕上原有的数据则会滚动出屏幕。 android

1.数据库

public class MainActivity extends Activity {

	
	private String[] data={"hao","hasds","adss","asasd","asddsa",
			"sadsda","sfd","sdfsdf","dsf","asdfdsa",
			"udfsiu","dsfu","fasdsf","jfsdyg","udhsf"};
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		ArrayAdapter<String> adapter=new 
				ArrayAdapter<String>
		(MainActivity.this,android.R.layout.simple_list_item_1 ,data);
		ListView listView=(ListView) findViewById(R.id.list_view);
		listView.setAdapter(adapter);
	}
}

即然 ListView 是用于展现大量数据的,那咱们就应该先将数据 供好。这些数据能够是 从网上下载的,也能够是从数据库中读取的,应该视具体的应用程序场景来决定。不过,数组中的数据是没法直接传递给 ListView 的,咱们还须要借助适配器来完成。 Android 中 供了不少适配器的实现类,其中我认为最好用的就是 ArrayAdapter。它能够通 过泛型来指定要适配的数据类型,而后在构造函数中把要适配的数据传入便可。ArrayAdapter 有多个构造函数的重载,你应该根据实际状况选择最合适的一种。这里因为咱们 供的数据 都是字符串,所以将 ArrayAdapter 的泛型指定为 String,而后在 ArrayAdapter 的构造函数中 依次传入当前上下文、ListView 子项布局的 id,以及要适配的数据。注意咱们使用了 android.R.layout.simple_list_item_1 做为 ListView 子项布局的 id,这是一个 Android 内置的布 局文件,里面只有一个 TextView,可用于简单地显示一段文本。最后,还须要调用 ListView setAdapter()方法,将构建好的适配器对象传递进去,这 样 ListView 和数据之间的关联就创建完成了。 数组

2.定制ListView页面,咱们先定义一个实体类做为ListView的适配类型,而后咱们还须要为咱们的ListView的子项指定自定义的布局,即为咱们的实体类的属性再定义一个布局,咱们好须要在建立一个自定义的适配器,这个适配器继承自ArrayAdapter,重写了父类的一组构造函数,用于将上下文、ListView 子项布局的 id 和数 据都传递进来。另外又重写了 getView()方法,这个方法在每一个子项被滚动到屏幕内的时候 会被调用。在 getView 方法中,首先经过 getItem()方法获得当前项的 Fruit 实例,而后使用 LayoutInflater 来为这个子项加载咱们传入的布局,接着调用 View findViewById()方法分别 获取到 ImageView TextView 的实例,并分别调用它们的 setImageResource()setText()方 法来设置显示的图片和文字,最后将布局返回,这样咱们自定义的适配器就完成了。而后咱们就向ArrayList中初始化数据,而后初始化自定义的适配器,拿到ListView的id,为它添加适配器。缓存

3.ListView的优化,咱们自定义Adapter时候的getView()方法每次都将布局从新加一遍,当ListView快速滚动时候这就成为了瓶颈了,咱们能够经过getView()方法的convertView参数进行缓存,getView()方法中进行了判断,若是 convertView 为空,则使用 LayoutInflater 去加载布局,若是不为空则直接对 convertView 进行重用。这样就大大 高了 ListView 的运行效率,在快速滚动的时候也能够表现出更好的性能。可是每次在 getView()方法中仍是会调用 View findViewById()方法来获取一次控件的实例,咱们经过内部类的中定义控件Id属性来帮助咱们解决重复加载。
4.ListView的点击事件,ide

listView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,

                    int position, long id) {
}});

而后在经过ArrayList中的get (position) 获取到当前的点击事件。函数

相关文章
相关标签/搜索