热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

安全卫士主界面适配器ada的优化

这是四年前的项目,手机卫士的主界面很简单,整体也就是一个GridView,启动模式设置为单利模式。GridViewgv_home(GridView)findViewById(R.id.gv_

这是四年前的项目,手机卫士的主界面很简单,整体也就是一个GridView,启动模式设置为单利模式。

GridView gv_home = (GridView) findViewById(R.id.gv_home);
gv_home.setAdapter(new HomeAda(Activity.this));


 class HomeAda extends BaseAdapter {
private Context context;


public HomeAda(Context context) {
this.cOntext= context;
}


private static final String[] names = { "手机防盗", "通讯卫士", "软件管理", "进程管理",
"流量统计", "手机杀毒", "系统优化", "高级工具", "系统设置" };
private static final int[] icOns= { R.drawable.safe_selector,
R.drawable.callmsgsafe, R.drawable.app, R.drawable.taskmanager,
R.drawable.netmanager, R.drawable.trojan, R.drawable.sysoptimize,
R.drawable.atools, R.drawable.settings };


@Override
public int getCount() {
return names.length;
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
// 把好看的布局 转化成 view对象.
View view = View.inflate(context, R.layout.list_home_item, null);
TextView tv_name = (TextView) view.findViewById(R.id.tv_home_name_item);
ImageView iv_icon = (ImageView) view
.findViewById(R.id.iv_home_icon_item);
tv_name.setText(names[position]);
iv_icon.setImageResource(icons[position]);

return view;
}


@Override
public Object getItem(int position) {
return null;
}


@Override
public long getItemId(int position) {
return 0;
}
}

适配器有几处可以优化的地方,例如

1   字符串数组可以写在 res/valuse文件夹下的string.xml文件里,         

手机防盗

通讯卫士

软件管理

进程管理

           

代码里面获取该数组资源

String[] itemNames = context.getResource().getStringArray(R.array.home_item_name);

同理,数字数组也可以用同样的方法。


name="actions_images">     @drawable/pencil1     @drawable/pencil2     @drawable/pencil3     @drawable/pencil4     @drawable/pencil5     @drawable/pencil6

TypedArray
ar = context.getResources().obtainTypedArray(R.array.actions_images);
intlen = ar.length();     int[] icons = newint[len];     for(inti = 0; i     icons [i] = ar.getResourceId(i, 0);   ar.recycle();

数字和上述一样。


2  获取item的个数,要逻辑清晰,不能产生空指针


public int getCount() {
int count = 0;
if(names !=null && names.length>0){
count = names.length;
}
return count;
}


3  生成view的方法,可以通用步骤优化


LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);



public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
// 把好看的布局 转化成 view对象.
if(cOnvertView== null){
viewHolder = new ViewHolder();
cOnvertView= View.inflate(context, R.layout.list_home_item, null);
viewHolder.tv_name = (TextView) convertView.findViewById(R.id.tv_home_name_item);
viewHolder.iv_icon = (ImageView) convertView
.findViewById(R.id.iv_home_icon_item);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.tv_name.setText(names[position]);
viewHolder.iv_icon.setImageResource(icons[position]);

return convertView;
}


class ViewHolder{
public TextView tv_name;
public ImageView iv_icon;
}


一个是布局复用,避免每次都创建新的,节省内存;

第二个是viewHolder的建立,用对象来保存控件的id值,避免每次都重新findViewById ,进一步节省内存开支。


item的点击阴影效果,可以配置xml布局的根节点的背景色。

android:background="@drawable/home_item_selector"




   
   
   
   
   
   


UI界面跳转,只需注册 条目点击事件即可。


5.0以后,google用  RecyclerView 代替了 Listview,可以多看看。 listview是复用item,在item中保存viewHolder, 而 recyclerview则是复用viewholder,在viewholder中保存item。




推荐阅读
  • Squaretest:自动生成功能测试代码的高效插件
    本文将介绍一款名为Squaretest的高效插件,该工具能够自动生成功能测试代码。使用这款插件的主要原因是公司近期加强了代码质量的管控,对各项目进行了严格的单元测试评估。Squaretest不仅提高了测试代码的生成效率,还显著提升了代码的质量和可靠性。 ... [详细]
  • 在Java项目中,当两个文件进行互相调用时出现了函数错误。具体问题出现在 `MainFrame.java` 文件中,该文件位于 `cn.javass.bookmgr` 包下,并且导入了 `java.awt.BorderLayout` 和 `java.awt.Event` 等相关类。为了确保项目的正常运行,请求提供专业的解决方案,以解决函数调用中的错误。建议从类路径、依赖关系和方法签名等方面入手,进行全面排查和调试。 ... [详细]
  • 本题库精选了Java核心知识点的练习题,旨在帮助学习者巩固和检验对Java理论基础的掌握。其中,选择题部分涵盖了访问控制权限等关键概念,例如,Java语言中仅允许子类或同一包内的类访问的访问权限为protected。此外,题库还包括其他重要知识点,如异常处理、多线程、集合框架等,全面覆盖Java编程的核心内容。 ... [详细]
  • 普通树(每个节点可以有任意数量的子节点)级序遍历 ... [详细]
  • C#实现文件的压缩与解压
    2019独角兽企业重金招聘Python工程师标准一、准备工作1、下载ICSharpCode.SharpZipLib.dll文件2、项目中引用这个dll二、文件压缩与解压共用类 ... [详细]
  • Android 自定义 RecycleView 左滑上下分层示例代码
    为了满足项目需求,需要在多个场景中实现左滑删除功能,并且后续可能在列表项中增加其他功能。虽然网络上有很多左滑删除的示例,但大多数封装不够完善。因此,我们尝试自己封装一个更加灵活和通用的解决方案。 ... [详细]
  • Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。比较重要的几个类:(1)Configurati ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • 解决问题:1、批量读取点云las数据2、点云数据读与写出3、csf滤波分类参考:https:github.comsuyunzzzCSF论文题目ÿ ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 在《ChartData类详解》一文中,我们将深入探讨 MPAndroidChart 中的 ChartData 类。本文将详细介绍如何设置图表颜色(Setting Colors)以及如何格式化数据值(Formatting Data Values),通过 ValueFormatter 的使用来提升图表的可读性和美观度。此外,我们还将介绍一些高级配置选项,帮助开发者更好地定制和优化图表展示效果。 ... [详细]
  • 深入解析C#中app.config文件的配置与修改方法
    在C#开发过程中,经常需要对系统的配置文件进行读写操作,如系统初始化参数的修改或运行时参数的更新。本文将详细介绍如何在C#中正确配置和修改app.config文件,包括其结构、常见用法以及最佳实践。此外,还将探讨exe.config文件的生成机制及其在不同环境下的应用,帮助开发者更好地管理和维护应用程序的配置信息。 ... [详细]
  • 本项目在Java Maven框架下,利用POI库实现了Excel数据的高效导入与导出功能。通过优化数据处理流程,提升了数据操作的性能和稳定性。项目已发布至GitHub,当前最新版本为0.0.5。该项目不仅适用于小型应用,也可扩展用于大型企业级系统,提供了灵活的数据管理解决方案。GitHub地址:https://github.com/83945105/holygrail,Maven坐标:`com.github.83945105:holygrail:0.0.5`。 ... [详细]
author-avatar
E-sc68
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有