关于各种Adapter ------------------------------------------ 1) ArrayAdapter:只能在Item中显示1种数据 2) SimpleAdapter: 只能显示固定的1个模板,以至于显示的每个Item的外观必须是一模一样的 3) BaseAdapter:完全自由的定制的AdapterListView+Adapter 开发流程----------------------------------------- 1) 在activity_main.xml中添加ListView控件,至少配置id、layout_width、layout_height属性,除此以外,ListView没有必要属性 2) 在MainActivity.java中,创建数据源List<?>,并在其中添加各项数据(Ps:在使用ArrayAdapter时,数据的集合都应该是List<String>类型的) 3) 在res\layout下,创建新的XML文件,根节点直接选择TextView 4) 在MainActivity.java中,声明并创建ArrayAdapter<String>,构造方法中应用R.layout.xxxx(第3步骤的文件)和数据源 5) 初始化ListView控件的对象,调用ListView的setAdapter()方法,为其配置ArrayAdapter即可
ListView+SimpleAdapter 开发流程1) 在activity_main.xml中添加ListView控件,至少配置id、layout_width、layout_height属性,除此以外,ListView没有必要属性2) 在MainActivity.java中,创建数据源List<Map<?,?>>,并在其中添加各项数据(Ps:在使用SimpleAdapter时,数据的集合都应该是List<Map<k,y>>类型的)3) 在res\layout下,创建新的XML文件,根节点直接选择TextView4) 在MainActivity.java中,声明并创建SimpleAdapter<T>,构造方法中应用R.layout.xxxx(第3步骤的文件)和数据源、from(根据Map的哪个key把数据取出来)、to(把取出来的数据显示到哪个空间上);5) 初始化ListView控件的对象,调用ListView的setAdapter()方法,为其配置SimpleAdapter即可
ListView+BaseAdapter1) 创建ContactAdapter继承自BaseAdapter,并添加抽象方法 2) 把getItem()和getItemId()方法置于最后,这2个方法暂时不用具体实现(不写代码) 3) 声明List<Contact>属性,并添加同类型参数的构造方法,通过构造方法设置该属性的值 4) 声明Context属性,并添加同类型参数的构造方法,通过构造方法设置该属性的值 5) 声明LayoutInflater属性,在构造方法中,通过LayoutInflater.from(Context context)方法设置该属性的值 6) 重写getCount()方法,返回值是List<Contact>的长度 7) 重写getView()方法,先使用LayoutInflater将模板加载为程序中的对象(View view),然后通过该对象获取模板中的控件(TextView tvName = (TextView)view.findViewById(R.id.xxxx);),再根据getView()方法的第1个参数int position从List<Contact>中获取需要显示的数据,设置到控件中,最后,返回View对象
关于BaseAdapter的优化 ------------------------------------------ 在使用BaseAdapter时,通过模板加载布局对象之前,应该对getView()方法的第2个参数View convertView进行判断,如果为null,则加载布局,否则,不加载。 因为ListView会自动重复使用convertView,当最顶部的Item滑出屏幕时,会将用于显示它的View对象作为底部新出现的Item的View对象,用于调用BaseAdapter的getView()方法。 以上优化原则是基于Android自动重复使用View对象实现的。 关于BaseAdapter的优化--使用ViewHolder ------------------------------------------ 推荐在ContactAdapter中定义内部类ViewHolder,用于封装模板中的各个控件,在getView()中,如果convertView为null,则创建新的ViewHolder,为ViewHolder中的各个控件赋值,并调用convertView的setTag()方法将ViewHolder对象封装起来,如果convertView()不为null,则直接调用convertView的getTag()方法获取ViewHolder对象。 通过以上代码,可以减少findViewById()的次数,以提升应用程序的性能。
Adapter
最新推荐文章于 2024-09-02 18:19:21 发布