复杂listView的adapter的优化
2015-12-03 13:01
603 查看
package com.study.mobilesafe.adapter; import java.util.List; import android.content.Context; import android.graphics.Color; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; import com.study.mobilesafe.R; import com.study.mobilesafe.db.dao.WatchDogDao; import com.study.mobilesafe.domain.AppInfo; public class AppsManagerAdapter extends BaseAdapter { private List<AppInfo> userInfos; private List<AppInfo> systemInfos; private LayoutInflater inflater; private Context context; private WatchDogDao watchDogDao; public AppsManagerAdapter(Context context, List<AppInfo> userInfos, List<AppInfo> systemInfos) { inflater = LayoutInflater.from(context); this.userInfos = userInfos; this.systemInfos = systemInfos; this.context = context; watchDogDao = new WatchDogDao(context); } @Override public int getCount() { return userInfos.size() + systemInfos.size() + 2; } @Override public Object getItem(int position) { // return infos.get(position); return null; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (position == 0) { TextView tv_ueser_apps_count = new TextView(context); tv_ueser_apps_count.setText("用户程序:(" + userInfos.size() + ")个"); tv_ueser_apps_count.setBackgroundColor(Color.GRAY); return tv_ueser_apps_count; } else if (position == userInfos.size() + 1) { TextView tv_system_apps_count = new TextView(context); tv_system_apps_count.setText("系统程序:(" + systemInfos.size() + ")个"); tv_system_apps_count.setBackgroundColor(Color.GRAY); return tv_system_apps_count; } ViewHolder holder = null; if (convertView != null && convertView instanceof RelativeLayout) { holder = (ViewHolder) convertView.getTag(); } else { holder = new ViewHolder(); convertView = inflater.inflate(R.layout.item_app_info, null); holder.iv_app_icon = (ImageView) convertView .findViewById(R.id.iv_app_icon); holder.tv_app_name = (TextView) convertView .findViewById(R.id.tv_app_name); holder.tv_app_isRom = (TextView) convertView .findViewById(R.id.tv_app_isRom); holder.tv_app_version = (TextView) convertView .findViewById(R.id.tv_app_version); holder.iv_lock = (ImageView) convertView.findViewById(R.id.iv_lock); convertView.setTag(holder); } AppInfo info; if (position <= userInfos.size()) { info = userInfos.get(position - 1); } else { info = systemInfos.get(position - userInfos.size() - 2); } holder.iv_app_icon.setImageDrawable(info.getIcon());// null.方法() holder.tv_app_name.setText(info.getName()); if (info.isRom()) { holder.tv_app_isRom.setText("手机内存"); } else { holder.tv_app_isRom.setText("SD卡"); } holder.tv_app_version.setText(info.getVersionName()); if (watchDogDao.queryIsLock(info.getPackageName())) { holder.iv_lock.setImageResource(R.drawable.lock); } else { holder.iv_lock.setImageResource(R.drawable.unlock); } if (info.getPackageName().equals(context.getPackageName())) { holder.iv_lock.setVisibility(View.INVISIBLE); }else{ holder.iv_lock.setVisibility(View.VISIBLE); } return convertView; } class ViewHolder { ImageView iv_app_icon; TextView tv_app_name; TextView tv_app_isRom; TextView tv_app_version; ImageView iv_lock; } }
运行效果:注意上面的TextView的显示。
调用的Activity写法:
private void listViewScroll() { lv_apps_manager.setOnScrollListener(new OnScrollListener() { // 当滑动状态改变的时候调用 @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } // 当listView滑动的时候调用 ---!!!第一次加载界面的时候触发了滑动事件 // --所以userInfos为空指针异常 @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if (userInfos != null && systemInfos != null) { if (firstVisibleItem >= userInfos.size() + 1) { tv_count.setText("系统程序(" + systemInfos.size() + ")个"); } else { tv_count.setText("用户程序(" + userInfos.size() + ")个"); } } } }); }
相关文章推荐
- scons 编译
- Android自定义ViewGroup自动分配子view位置
- adapter的优化
- hibernate入门
- Android第三方开源NiftyNotification(Android Toast替代品):动画效果生动有趣的通知
- Android源码--程序的分享、卸载、启动及详细信息
- jdk中有味道的代码段
- iOS UIPanGestureRecognizer(拖动手势) 和 点击按钮 实现类似左抽屉的效果
- 浅谈移动测试
- 应用的异常处理器
- 把json对象数组属性相同的进行分组,然后取值
- HDU 2577 How to Type DP
- 长度为0的数组和 null
- LeetCode(226)Invert Binary Tree
- static代码块 代码块 构造方法(一个参数) 构造方法(二个参数)
- LeetCode(226)Invert Binary Tree
- 常用正则
- iOS KVC & KVO
- LeetCode(226)Invert Binary Tree
- Android 编程下 Touch 事件的分发和消费机制