74将进程信息初步展示出来(BUG[已解决]:用户进程标签加载不了)

在onCreate()方法中加载数据,加载数据可能比较耗时,我们需要将其放到子线程中进行处理:

/**
	 * 加载数据
	 */
	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既可以解决。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值