74将进程信息初步展示出来(BUG[已解决]:用户进程标签加载不了)
2014-12-23 16:26
176 查看
在onCreate()方法中加载数据,加载数据可能比较耗时,我们需要将其放到子线程中进行处理:
将用户进程和系统进程信息添加到相应的集合中,handler发送消息,通知界面更新:设置Adapter:
自定义Adapter,继承自BaseAdapter,这个布局和软件管理的界面差不多一样,如下:
这部分有个小bug,假如没有ListView的滚动事件,设置小标签的位置,那么在adapter中的position==0小标签的文字出不来,不明白为什么。
效果图:
前面提到的bug的解决:设置ListView的setOnScrollListener既可以解决。
/** * 加载数据 */ private void fillData() { ll_loading.setVisibility(View.VISIBLE); new Thread() { public void run() { allTaskInfos = TaskInfoProvider .getTaskInfo(getApplicationContext()); userTaskInfos = new ArrayList<TaskInfo>(); systemTaskInfos = new ArrayList<TaskInfo>(); for (TaskInfo taskInfo : allTaskInfos) { if (taskInfo.isUserTask()) { userTaskInfos.add(taskInfo); } else { systemTaskInfos.add(taskInfo); } } handler.sendEmptyMessage(0); }; }.start(); }
将用户进程和系统进程信息添加到相应的集合中,handler发送消息,通知界面更新:设置Adapter:
private Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { ll_loading.setVisibility(View.GONE); adapter = new TaskManagerAdapter(); lv_task_manager.setAdapter(adapter); }; };
自定义Adapter,继承自BaseAdapter,这个布局和软件管理的界面差不多一样,如下:
private class TaskManagerAdapter extends BaseAdapter { @Override public int getCount() { return userTaskInfos.size() + 1 + systemTaskInfos.size() + 1; } @Override public View getView(int position, View convertView, ViewGroup parent) { TaskInfo taskInfo; if (position == 0) {// 用户进程的标签 TextView tv = new TextView(getApplicationContext()); tv.setText("用户进程:" + userTaskInfos.size() + "个"); tv.setTextColor(Color.WHITE); tv.setBackgroundColor(Color.GRAY); return tv; } else if (position == (userTaskInfos.size() + 1)) { TextView tv = new TextView(getApplicationContext()); tv.setText("系统进程:" + systemTaskInfos.size() + "个"); tv.setTextColor(Color.WHITE); tv.setBackgroundColor(Color.GRAY); return tv; } else if (position <= userTaskInfos.size()) { taskInfo = userTaskInfos.get(position - 1); } else { taskInfo = systemTaskInfos.get(position - 1 - userTaskInfos.size() - 1); } View view; ViewHolder viewHolder; if (convertView != null && convertView instanceof RelativeLayout) { view = convertView; viewHolder = (ViewHolder) view.getTag(); } else { view = View.inflate(getApplicationContext(), R.layout.list_item_taskinfo, null); viewHolder = new ViewHolder(); viewHolder.iv_task_icon = (CircleImageView) view .findViewById(R.id.iv_task_icon); viewHolder.tv_task_name = (TextView) view .findViewById(R.id.tv_task_name); viewHolder.tv_task_memsize = (TextView) view .findViewById(R.id.tv_task_memsize); view.setTag(viewHolder); } viewHolder.iv_task_icon.setImageDrawable(taskInfo.getIcon()); viewHolder.tv_task_name.setText(taskInfo.getName()); viewHolder.tv_task_memsize.setText("内存占用:" + Formatter.formatFileSize(getApplicationContext(), taskInfo.getMemSize())); return view; } @Override public Object getItem(int position) { TaskInfo taskInfo; if (position == 0) { return null; } else if (position == (userTaskInfos.size() + 1)) { return null; } else if (position <= userTaskInfos.size()) { taskInfo = userTaskInfos.get(position - 1); } else { taskInfo = systemTaskInfos.get(position - 1 - userTaskInfos.size() - 1); } return taskInfo; } @Override public long getItemId(int position) { return 0; } } static class ViewHolder { CircleImageView iv_task_icon; TextView tv_task_name; TextView tv_task_memsize; }
这部分有个小bug,假如没有ListView的滚动事件,设置小标签的位置,那么在adapter中的position==0小标签的文字出不来,不明白为什么。
效果图:
前面提到的bug的解决:设置ListView的setOnScrollListener既可以解决。
相关文章推荐
- 用JavaScript获取Json格式的用户信息,并利用模型展示出来
- 72获取内存信息(运行的进程数,可用的总内存,剩余内存)&&获取可用的总内存的BUG的解决
- 我在使用ng-src时图片加载不出来后,Chrome会自动给img标签增边框,解决办法
- 当前表单的所有信息以对话框的形式表现出来,请问怎么解决?
- 解决“从用户数据存储中检索信息时出错。未找到平台。”问题
- 用户控件动态加载图片问题解决方法!
- 解决Rational rtmanager命令行方式无法执行多用户的Bug
- 在编写JSP标签语言时,引用JS的BUG和解决办法
- 解决导航问题winform的左侧树控件右侧panel加载用户控件
- 由于您和其他用户试图同时改变同一数据,导致 Microsoft Jet 数据库引擎停止进程。解决方法
- 解决“从用户数据存储中检索信息时出错。未找到平台。”问题。
- 解决vista下,普通用户,关闭了uac,运行xeyez.exe会崩溃的bug
- 找到了一个动态加载web用户自定义控件的问题,不知道算不算是微软的bug
- openmeetings在flash player10中,解决加载文档显示不出来的问题
- 解决导航问题winform的左侧树控件右侧panel加载用户控件
- 当程序用ado的jet4.0方式连接的时候,对于设有access数据库密码的mdb的访问居然报错“无法启动应用程序,工作组信息文件丢失,或是已被其他用户已独占方式打开”,而用odbc方式不报错,小阴沟里翻船,郁闷中然后查文档解决之
- Login控件在UpdatePanel内当验证用户信息成功后出现页面刷新的解决办法
- Login控件在UpdatePanel内当验证用户信息成功后出现页面刷新的解决办法
- Login控件在UpdatePanel内当验证用户信息成功后出现页面刷新的解决办法
- 解决"System.Reflection.ReflectionTypeLoadException: 无法加载一个或多个请求的类型。有关更多信息,请检索 LoaderExceptions 属性" 方法