andriod之自定义适配器与ListView的优化:

来源:互联网 发布:淘宝韩国直邮鉴别真假 编辑:程序博客网 时间:2024/06/01 08:46

自定义适配器:BaseAdapter

BaseAdapter
    定义: 基本适配器的抽象类,且是ArrayAdapter、SimpleAdapter的父类
    功能:用于实现复杂的数据显示
    需要实现的方法
        public int getCount() 返回数据源的大小
        public long getItemId(int position) 返回指定位置的item控件id
        public Object getItem(int position) 返回指定位置的数据
        public View getView(int position,View convertView,ViewGroup parent) 返回指定位置的控件

ListView的优化:
 >1,布局xml文件  listView的高度 固定  match_parent  减少getView的次数

 >2,判断convertView是否为null  如果为空得话 使用布局加载器 去创建一个view
        //如果不为空的话  直接拿来使用

>3.//将ViewHold保存到convertView中 convertView.setTag(viewHold);
   //将ViewHold从convertView中直接拿出来使用viewHold = (ViewHold) convertView.getTag();


Java代码

import java.util.List;

import android.R.xml;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.qianfeng.day08_baseadaptertest.R;
import com.qianfeng.day08_baseadaptertest.modle.Data;

public class MyAdapter extends BaseAdapter{
    private List<Data> list;
    private Context context;
    
    public MyAdapter(List<Data> list,Context context){
        this.list = list;
        this.context = context;
    }
    

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        Log.i("==getView1==>", "==position==>"+position);
        Log.i("==getView2==>", "==convertView==>"+convertView);
        
//        View view = LayoutInflater.from(context).inflate(R.layout.item, null);
//        ImageView iv =  (ImageView) view.findViewById(R.id.iv);
//        TextView titleViw =  (TextView) view.findViewById(R.id.titleView);
//        TextView descView =  (TextView) view.findViewById(R.id.descView);
//        TextView dateView =  (TextView) view.findViewById(R.id.dateView);
//        
//        Data data = list.get(position);
//        iv.setImageResource(data.getImgUrl());
//        titleViw.setText(data.getTitle());
//        descView.setText(data.getDesc());
//        dateView.setText(data.getDate());
//        
//        return view;
        
//        //2
//        //判断convertView是否为null  如果为空得话 使用布局加载器 去创建一个view
//        //如果不为空的话  直接拿来使用
//        if(convertView == null){
//            convertView = LayoutInflater.from(context).inflate(R.layout.item, null);
//        }
//            ImageView iv =  (ImageView) convertView.findViewById(R.id.iv);
//            TextView titleViw =  (TextView) convertView.findViewById(R.id.titleView);
//            TextView descView =  (TextView) convertView.findViewById(R.id.descView);
//            TextView dateView =  (TextView) convertView.findViewById(R.id.dateView);
//            
//            Data data = list.get(position);
//            iv.setImageResource(data.getImgUrl());
//            titleViw.setText(data.getTitle());
//            descView.setText(data.getDesc());
//            dateView.setText(data.getDate());
//        
//        return convertView;
        
        //第三种
        ViewHold viewHold;
        if(convertView == null){
            convertView = LayoutInflater.from(context).inflate(R.layout.item, null);
            viewHold =  new ViewHold();
            viewHold.iv = (ImageView) convertView.findViewById(R.id.iv);
            viewHold.titleViw = (TextView) convertView.findViewById(R.id.titleView);
            viewHold.descView = (TextView) convertView.findViewById(R.id.descView);
            viewHold.dateView = (TextView) convertView.findViewById(R.id.dateView);
            //将ViewHold保存到convertView中
            convertView.setTag(viewHold);
        }
        //将ViewHold从convertView中直接拿出来使用
        viewHold = (ViewHold) convertView.getTag();
            Data data = list.get(position);
            viewHold.iv.setImageResource(data.getImgUrl());
            viewHold.titleViw.setText(data.getTitle());
            viewHold.descView.setText(data.getDesc());
            viewHold.dateView.setText(data.getDate());
        return convertView;
    }
    
    
    class ViewHold{
        ImageView iv;
        TextView titleViw;
        TextView descView;
        TextView dateView;
    }

}

0 0
原创粉丝点击