Android-BaseAdapter学习
来源:互联网 发布:软件研发部管理制度 编辑:程序博客网 时间:2024/06/10 08:40
当我们要自定义ListView控件的时候,我们自定义的Adapter就要继承Baseadapter来定制我们要实现的功能。
Note:
当我们继承BaseAdapter类的时候,最重要的是getView方法,在这个方法中我们来对ListView进行优化,这里边有两点是用来进行优化的:
1. 自定义的ViewHolder类,用了保存通过findViewById获取的每个Item中各个控件的id,这样可以减少在加载list的时候查找id的时间。
2.判断contentView是否为空,来复用Item,避免每次显示一个Item的时候,都需要重新加载一个新Item的布局。比如,一个Listview有100条数据,但是我们的屏幕只能够显示10条数据,如果不进行判断,当我们下拉显示所有数据的时候,内存中就会加载100条item的布局,而进行判断之后,则内存中只加载10条新的item的布局,然后下拉显示数据时,就会复用这10条Item的布局,只是数据进行变化。
除了以上两点,ListView还有其他地方需要优化,比如数据异步加载,图片缓存等方面。
下面我再给出一个Fragment中使用BaseAdapter实例:
1、ListFragment.class
import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.content.Intent;import android.os.Bundle;import android.support.v4.app.Fragment;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.ListView;import android.widget.TextView;public class ListFragment extends Fragment {private ListView contactList;private List<Map<String,Object>> dataList;private MyAdapter myAdapter;@Overridepublic void onCreate(Bundle savedInstanceState) {Log.w("onCreate", "执行");super.onCreate(savedInstanceState);}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {Log.w("", "onCreateView()执行");View view=inflater.inflate(R.layout.list_fragment,container,false);contactList=(ListView) view.findViewById(R.id.contactListView);init();//在此初始化return view;}private void init(){Log.w(getClass().getName()+" init(): ", "start");dataList=new ArrayList<Map<String,Object>>();getData();myAdapter=new MyAdapter();contactList.setAdapter(myAdapter);Log.w(getClass().getName()+" init(): ", "end");}//把数据放入list中,数据源可以来自网络,本地文件,本例子自动赋值private void getData(){Log.w(this.getClass().getName()+" getData()", "start");Map<String , Object> map;for(int i = 0;i<100;i++ ){map=new HashMap<String, Object>();map.put("contactName", "name : "+i);map.put("contactNumber", "100"+ "i");map.put("contactIcon", R.drawable.icon_tab_calllog);dataList.add(map);}}private class MyAdapter extends BaseAdapter{private LayoutInflater mInflater;public MyAdapter() { this.mInflater=LayoutInflater.from(getActivity());}@Overridepublic int getCount() {System.out.println("getCount() start!!!!!!!!! "+dataList.size());return dataList.size();}@Overridepublic Object getItem(int position) {return position;}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {Log.w(getClass().getName()+" getView(): ", "start");ViewHolder viewHolder;if(convertView==null){System.out.println("convert==null");convertView=mInflater.inflate(R.layout.contact_list_item,null);viewHolder=new ViewHolder();viewHolder.contactIcon=(ImageView) convertView.findViewById(R.id.contactIcon);viewHolder.contactName=(TextView) convertView.findViewById(R.id.contactName);viewHolder.contactNumber=(TextView) convertView.findViewById(R.id.contactNumber);convertView.setTag(viewHolder);}else{viewHolder=(ViewHolder) convertView.getTag();}viewHolder.contactIcon.setImageResource((Integer) dataList.get(position).get("contactIcon"));viewHolder.contactName.setText((CharSequence) dataList.get(position).get("contactText"));viewHolder.contactNumber.setText((CharSequence) dataList.get(position).get("contactNumber"));convertView.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//自定义点击事件}});return convertView;}}static class ViewHolder{ImageView contactIcon;TextView contactName;TextView contactNumber;}}
2、list_fragment.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ListView android:id="@+id/contactListView" android:layout_width="fill_parent" android:layout_height="fill_parent" > </ListView></LinearLayout>
3、contact_list_item.xml 自定义list中每一个item要显示的内容
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <ImageView android:id="@+id/contactIcon" android:layout_width="50dp" android:layout_height="50dp" android:contentDescription="头像" /> <LinearLayout android:layout_height="fill_parent" android:layout_width="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/contactName" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/contactNumber" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout> </LinearLayout>
参考文章了,给出链接:
http://www.cnblogs.com/loulijun/archive/2011/12/28/2305016.html
- Android-BaseAdapter学习
- Android学习之BaseAdapter
- Android学习之适配器BaseAdapter
- Android学习笔记---BaseAdapter优化
- Android学习ListView自定义布局,适配器BaseAdapter
- Android学习篇章3-Gallery画廊-Baseadapter
- 【Android适配器系列】BaseAdapter学习笔记
- android学习之旅--BaseAdapter细节
- BaseAdapter学习
- Android --- BaseAdapter
- Android BaseAdapter
- android BaseAdapter
- Android BaseAdapter
- Android BaseAdapter
- Android BaseAdapter
- Android BaseAdapter
- Android学习备忘002——ListView/GridView&BaseAdapter
- Android开发————BaseAdapter学习笔记
- 推荐几个检测网站信息的平台(安全性、访问速度、漏洞)
- 理解memcache客户端和服务器端
- 旺旺老师JavaWeb视频(02)Servlet本质
- python常用模块介绍(转自itech's blog)
- IOS遍历未知对象属性、函数
- Android-BaseAdapter学习
- V4L2 Device Driver详解<一> 基础知识
- virtual base class(虚基类)
- activity中finish方法的学习
- 启动Tomcat出现错误:严重: Error initializing endpoint ;严重: Catalina.start 等的解决
- 数字1特别对待也看作是丑数
- 安卓--实现多线程断点续传
- 安静,是岁月最美的留白
- 查看所有的端口占用情况