热门标签 | 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。




推荐阅读
  • 本文详细介绍了Android中的坐标系以及与View相关的方法。首先介绍了Android坐标系和视图坐标系的概念,并通过图示进行了解释。接着提到了View的大小可以超过手机屏幕,并且只有在手机屏幕内才能看到。最后,作者表示将在后续文章中继续探讨与View相关的内容。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讲述了如何通过代码在Android中更改Recycler视图项的背景颜色。通过在onBindViewHolder方法中设置条件判断,可以实现根据条件改变背景颜色的效果。同时,还介绍了如何修改底部边框颜色以及提供了RecyclerView Fragment layout.xml和项目布局文件的示例代码。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
  • 本文介绍了一款名为TimeSelector的Android日期时间选择器,采用了Material Design风格,可以在Android Studio中通过gradle添加依赖来使用,也可以在Eclipse中下载源码使用。文章详细介绍了TimeSelector的构造方法和参数说明,以及如何使用回调函数来处理选取时间后的操作。同时还提供了示例代码和可选的起始时间和结束时间设置。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 本文介绍了MVP架构模式及其在国庆技术博客中的应用。MVP架构模式是一种演变自MVC架构的新模式,其中View和Model之间的通信通过Presenter进行。相比MVC架构,MVP架构将交互逻辑放在Presenter内部,而View直接从Model中读取数据而不是通过Controller。本文还探讨了MVP架构在国庆技术博客中的具体应用。 ... [详细]
author-avatar
E-sc68
这个家伙很懒,什么也没留下!
RankList | 热门文章