zoukankan      html  css  js  c++  java
  • Android开发之适配器-ListView适配器的重复数据

    适配器是Android中的数据与View视图的桥梁,作用就是将数据通过适配器显示到对应的View视图上。

    工作中,在用ListView做适配器数据时候,有些人肯定碰见过,如何优化效率,但是又出现重复数据的情况,如何避免重复数据而且又能提高ListView大数据量时候的效率呢?,解决方案就是2点:

    1. 在getView方法中 进行View的判断,即做convertView ==null 这样的判断,这样是为了提高数据量大的时候的效率。

    2.设置数据用setTag()/getTag()方法来进行对数据的存取,这样就可以防止数据的重复显示了

    通过以上两点方法的处理,就可以达到较好的既提高显示效率,又防止重复显示数据的问题。下面给出一个实现的案例:

    主要核心解决方案就是红色标注的部分代码。

    package com.czm.adapter;
    
    import java.util.ArrayList;
    
    
    
    import android.R.integer;
    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.LinearLayout;
    import android.widget.TextView;
    
    import com.czm.entity.FileItem;
    import com.czm.xcfilemanager.R;
    
    /**
     * //设置sd卡的list适配器
     * @author jczmdeveloper
     *
     */
    
    public class SdcardListAdapter extends BaseAdapter{
    
        private LayoutInflater inflater;
        private Context context;
        private ArrayList listData;
        private boolean[]  checkFlagList;
        static class ListItemView{                //自定义控件集合  
            public ImageView imageView;  
            public TextView tvFileName;
            public TextView tvFileOther;  
            public ImageView ivCheck;
           
     }  
        
        public SdcardListAdapter(Context ctx,ArrayList list){
            this.context = ctx;
            this.listData = list;
            inflater = LayoutInflater.from(context);
            
            checkFlagList = new boolean[listData.size()];
        }
        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return listData.size();
        }
    
        @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 View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            
            //自定义视图
            ListItemView  listItemView = null;
            if(convertView ==null){
                //获取list_item布局文件的视图
                convertView = inflater.inflate(R.layout.sdcard_list_item, null);
                
                listItemView = new ListItemView();
                //获取控件对象
                listItemView.imageView =  (ImageView) convertView.findViewById(R.id.ivFileLogo);
                listItemView.tvFileName = (TextView)convertView.findViewById(R.id.tvFileName);
                listItemView.tvFileOther = (TextView)convertView.findViewById(R.id.tvFileOther);
                listItemView.ivCheck = (ImageView)convertView.findViewById(R.id.ivCheck);
                
                //设置控件集到convertView
                convertView.setTag(listItemView);
            }else {
                listItemView = (ListItemView)convertView.getTag();
            }
            //设置文字和图片
            FileItem fileItem = (FileItem) listData.get(position);
            
            listItemView.imageView.setImageResource(fileItem.getImageID());
            listItemView.tvFileName.setText(fileItem.getStrFileName().toString());
            listItemView.tvFileOther.setText(fileItem.getnFileSize()+
            fileItem.getStrDateTime().toString());
            if(checkFlagList[position]){
                listItemView.ivCheck.setImageResource(R.drawable.check);
            }else{
                listItemView.ivCheck.setImageResource(R.drawable.uncheck);
            }
            
            
            return convertView;
        }
        public void setCheckFlag(int position,boolean bChecked){
            checkFlagList[position] = bChecked;
        }
        public boolean getCheckFlag(int position){
            return checkFlagList[position];
        }
        public boolean[] getCheckFlags(){
            return checkFlagList;
        }
    
    }
  • 相关阅读:
    字符串拼接练习
    java数字字符的全半角转化
    mysql 的group by 满足的规则要求:
    从指定字符串获取n个随机数
    jQuery去除空格的$.trim()
    mysql里的位运算小结
    sql的case 用法
    泛型之元组示例
    jQuery里的replaceAll和replaceWith
    根据索引条件查询结果与原表关联的查询
  • 原文地址:https://www.cnblogs.com/JczmDeveloper/p/3760805.html
Copyright © 2011-2022 走看看