Android加载数据ListView优化内存实现
发布时间:2020-12-14 23:29:01 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 问题分析 解决方案 //有多少个条目被显示,这个方法就会被调用多少次 @Override public View getView(final int position,View convertView,ViewGroup
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 问题分析解决方案//有多少个条目被显示,这个方法就会被调用多少次 @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()方法。 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |