android listview 的使用

在开发android 应用的时候,我们经常需要使用到 listview, 下面写一个一般的adapter 的代码贴出来,与大家共享一下:


public class TraceMapAdapter extends BaseAdapter  {

    private static final int VIEWTYPE1 = 0;// 类型1
    private static final int VIEWTYPE2 = 1;// 类型2

    ------ 有时候,我们的listview 里面的所有项的展现形式不是完全一样的,需要多种类型,这时可以在adapter里面定义不同的类型



    private ArrayList<FootMark> footList;    -----保存数据

    public TraceMapAdapter(Context context, ArrayList<FootMark> footList) {
        super(context);
        this.footList = footList;
    }

    public void setList(ArrayList<FootMark> footList) {
        this.footList = footList;
    }     -----用于listview 的数据改变时,进行数据更新


    @Override
    public int getCount() {  
        return footList == null ? 0 : footList.size();
    }   -----获取listview的条目个数,这个数目要对

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

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

    @Override
    public int getItemViewType(int position) {
        if (position == footList.size() - 1) {
            return VIEWTYPE2;
        } else {
            return VIEWTYPE1;
        }
    }-----获取每一项的类型

    @Override
    public int getViewTypeCount() {
        return 2;
    }-----获取所有类型的个数,我们这里只有两种类型

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {        
        int type = getItemViewType(position);
        if (convertView == null) {   ------listview 有复用的概念,convertView为可复用的view,当convertView不可空时,就不用重新创建view了
            convertView = get(type);  ----创建我们需要使用的view
        }
        FootMark foot = footList.get(position);
        setData(type, convertView, foot, position); -----设置view里面的数据
        convertView.setTag(foot);  -----设置view的tag, 可能会使用到
        return convertView;
    }-----获取每一项的view

    private View get(int type) {
        View view = null;
        switch (type) {
        case VIEWTYPE1:
            view = LayoutInflater.from(mContext).inflate(
                    R.layout.listitem_trace, null);
            TextHolder textHolder1 = new TextHolder();
            findViewText(textHolder1, view);
            view.setTag(R.id.TAG, textHolder1);
            
            break;
        case VIEWTYPE2:
            view = LayoutInflater.from(mContext).inflate(
                    R.layout.listitem_trace_last, null);
            TextHolder textHolder2 = new TextHolder();
            findViewText(textHolder2, view);
            view.setTag(R.id.TAG, textHolder2);
            break;
        }
        return view;
    }

    private void setData(int type, View view, FootMark foot, int position) {
        switch (type) {
        case VIEWTYPE1:
            TextHolder textHolder1 = (TextHolder) view.getTag(R.id.TAG);
            setDataText(textHolder1, foot, type, position);
            break;
        case VIEWTYPE2:
            TextHolder textHolder2 = (TextHolder) view.getTag(R.id.TAG);
            setDataText(textHolder2, foot, type, position);
            break;
        }
    }

    private void setDataText(TextHolder holder, FootMark foot, int type, int position) {        
        holder.tracename.setText(foot.getlocation());
        holder.tracetime.setText(foot.getcreate_time());
    }

    private void findViewText(TextHolder holder, View view) {
        holder.tracename = (TextView) view.findViewById(R.id.tracename);
        holder.tracetime = (TextView) view.findViewById(R.id.tracetime);
    }
    
    // 静态类用于获取和处理列表中每个条目数据的更新
    private static class TextHolder {
        TextView tracename;
        TextView tracetime;
    }
}



上面就是一般的自定义adapter的写法。


还有一个点就是,在adapter 里面,如果每一项都有imageview 需要从网络下载图片时,则需要注意,不能每次getview 的时候,都直接下载图片,否则当用力向下滑动时,每一个view 都去获取图片,会造成卡顿,一般的处理方法是,当 listview 处于滑动状态时,不去加载图片,当停止加载时,再去加载图片,这样可以有效避免卡顿。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值