Android加载数据ListView优化内存实现

下面是编程之家 jb51.cc 通过网络收集整理的代码片段。

编程之家小编现在分享给大家,也给大家做个参考。

问题分析

解决方

    //有多少个条目被显示,这个方法就会被调用多少次  
    @Override  
    public View getView(final int position,View convertView,ViewGroup parent) {  
        View view;  
        ViewHolder holder;  
        //1.减少内存中view对象创建的个数(优化listView,避免内存溢出)  
        if(convertView==null){  
            Log.i(TAG,"创建新的view对象:"+position);  
            //把一个布局文件转化成  view对象。  
            view  = View.inflate(getApplicationContext(),R.layout.list_item_callsms,null);  
            //2.减少子孩子查询次数  内存中对象的地址。  
            holder = new ViewHolder();  
            holder.tv_number = (TextView) view.findViewById(R.id.tv_black_number);  
            holder.tv_mode = (TextView) view.findViewById(R.id.tv_block_mode);  
            holder.iv_delete = (ImageView) view.findViewById(R.id.iv_delete);  
            //当孩子生出来的时候找到他们的引用,存放在记事本,放在父亲的口袋  
            view.setTag(holder);  
        }else{  
            Log.i(TAG,"厨房有历史的view对象,复用历史缓存的view对象:"+position);  
            view = convertView;  
            holder = (ViewHolder) view.getTag();  
            //通过封装成对象的方式性能优化5%,很小,这里不给出Holder类,不如内存地址复用效果显著  
        }  
        holder.tv_number.setText(infos.get(position).getNumber());  
        String mode = infos.get(position).getMode();  
          
        //删除事件响应,这里留着以后用  
        holder.iv_delete.setonClickListener(new OnClickListener() {  
            @Override  
            public void onClick(View v) {  
                AlertDialog.Builder builder = new Builder(CallSmsSafeActivity.this);  
                builder.setTitle("警告");  
                builder.setMessage("确定要删除这条记录么?");  
                //DialogInterface接口类方法  
                builder.setPositiveButton("确定",new DialogInterface.OnClickListener() {  
                    @Override  
                    public void onClick(DialogInterface dialog,int which) {  
                        //删除数据库内容  
                        dao.delete(infos.get(position).getNumber());  
                        //更新界面。  
                        infos.remove(position);  
                        //通知listview数据适配器更新  
                        adapter.notifyDataSetChanged();  
                    }  
                });  
                builder.setNegativeButton("取消",null);  
                builder.show();  
            }  
        });  
        return view;  
    }  

实现方法代码分析。顺便提一下,代码中有删除操作代码,重点看在增加删除后数据如何更新到ListView中的,就是adapter.notifyDataSetChanged()方法

以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

相关文章

Java中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...