BaseAdapter使用与优化

来源:互联网 发布:linux搭建hadoop 编辑:程序博客网 时间:2024/05/18 20:06

BaseAdpter自由度很高,能实现很多需求,十分值得学习.

 这是listview的Item的布局

实现BaseAdpter首先得创建继承BaseAdpter类

public class MyAdapter  extends  BaseAdapter{private List<ItemContent> list;private LayoutInflater inflater;private Context context;ItemContent content; //item封装对象@Overridepublic int getCount() {// TODO 自动生成的方法存根return 0;    //return list.size();得到list长度}@Overridepublic Object getItem(int position) {// TODO 自动生成的方法存根return null;      // <span style="white-space:pre"></span>return list.get(position);得到list指定position位置item@Overridepublic long getItemId(int position) {// TODO 自动生成的方法存根return 0;     //return position; 得到当前item位置}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {  //返回控件// TODO 自动生成的方法存根return null;}



<strong>getView 耗时写法</strong>
<strong></strong><pre name="code" class="java">public View getView(int position, View convertView, ViewGroup parent) {// TODO 自动生成的方法存根content = list.get(position);      //得到当前item封装类对象View view =inflater.inflate(R.layout.listitem, null); //加载布局ImageView imageView=(ImageView) view.findViewById(R.id.imageView1);TextView tv= (TextView) view.findViewById(R.id.textView1);Button button=(Button) view.findViewById(R.id.button);imageView.setImageResource(content.image); tv.setText(content.text);button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO 自动生成的方法存根Toast.makeText(context, "click", 0).show();}});return view;


}

上述这样写代码虽然简短,但每个item都得重新加载布局和findviewbyid,对手机负担较大十分影响性能。
所以推荐用下面这种优化方式 添加ViewHolder内部类find控件和判断convertView 是否已被加载,这样所以的初始化只有进行一次就够了,对性能的优化显著提升
public View getView(int position, View convertView, ViewGroup parent) {// TODO 自动生成的方法存根content = list.get(position);  //得到当前item封装类对象ViewHolder viewHolder;if (convertView == null) {  //只有null时才会加载布局                  viewHolder = new ViewHolder();convertView = inflater.inflate(R.layout.listitem, null); // 缓存 ,不重复创建viewHolder.imageView = (ImageView) convertView.findViewById(R.id.imageView1);viewHolder.tv = (TextView) convertView.findViewById(R.id.textView1);viewHolder.button=(Button) convertView.findViewById(R.id.button);convertView.setTag(viewHolder);//设置标签}else {viewHolder=(ViewHolder) convertView.getTag();viewHolder.imageView.setImageResource(content.image); viewHolder.tv.setText(content.text);viewHolder.button.setOnClickListener(new OnClickListener() @Overridepublic void onClick(View v) {// TODO 自动生成的方法存根Toast.makeText(context, "click", 0).show();}});return convertView;}class ViewHolder {   // 防止findviewbyid重复使用ImageView imageView;TextView tv;Button button;}
                                             
0 0
原创粉丝点击