2014年12月28日

一、holder的错误:

android中经常会用到listview。在给listview填充数据时,为了提高效率,通常会使用holder来封装控件及其数据。使用方法如下:

    public View getView(int position, View convertView, ViewGroup parent) {

   View view = null;
   if (convertView != null && convertView instanceof RelativeLayout) {
    view = convertView;
    holder = (ViewHolder) view.getTag();
   } else {
    view = View.inflate(Activity_TaskManager.this,
     R.layout.item_taskmanager, null);
    holder = new ViewHolder();
    holder.icon = (ImageView) view.findViewById(R.id.iv_taskicon);//一定不要再忘记在findViewById前面    加 view
    holder.name = (TextView) view.findViewById(R.id.tv_appname);
    holder.size = (TextView) view.findViewById(R.id.tv_tasksize);
    holder.cb=(CheckBox) view.findViewById(R.id.cb_taskmanager);
    view.setTag(holder);
   }

   if (position == 0) {
    TextView tv_usetask = new TextView(Activity_TaskManager.this);
    tv_usetask.setBackgroundColor(Color.GRAY);
    tv_usetask.setTextColor(Color.BLUE);
    tv_usetask.setText("用户进程(" + usetaskinfos.size() + ")");
    return tv_usetask;
   } else if (position == usetaskinfos.size() + 1) {
    TextView tv_usetask = new TextView(Activity_TaskManager.this);
    tv_usetask.setBackgroundColor(Color.GRAY);
    tv_usetask.setTextColor(Color.BLUE);
    tv_usetask.setText("系统进程(" + systemtaskinfos.size() + ")");
    return tv_usetask;
   } else if (position <= usetaskinfos.size()) {
    int newposition = position - 1;
    tb = usetaskinfos.get(newposition);
   } else {
    int newposition = position - 1 - usetaskinfos.size() - 1;
    tb = systemtaskinfos.get(newposition);
   }
   holder.icon.setImageDrawable(tb.getIcon());
   holder.name.setText(tb.getApkname());
   holder.size.setText(tb.getRamsize()+"");
   return view;
  }

  在这里需要注意几点:

 1、getView这个方法主要是填充布局的。在第一个if判断中,当convertView !=null时,我们除了需要吧convertView 的内容赋值给view视图对象外,还需要把view里面的数据传递给holder。

 2、holder的声明一般放在填充view布局的后面,初始化holder。方便调用holder。

 3、声明完holder对象,别忘了设置给view对象。

二、handler的错误:

在使用子线程处理耗时的操作时子线程会给handler发送消息,这个消息必须写在子线程的run()里面,否则就是无效的。

如下:

// 初始化数据
 private void initData() {
  new Thread() {
   public void run() {
    usetaskinfos = new ArrayList();
    systemtaskinfos = new ArrayList();
    taskinfos = TaskInfoParser
      .getRunningtask(Activity_TaskManager.this);
    for (TaskBean info : taskinfos) {
     if (info.isUsetask()) {
      usetaskinfos.add(info);
     } else {
      systemtaskinfos.add(info);
     }
    }
    handler.sendEmptyMessage(0);//写在run()里面才是正确的
   }
  }.start();
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值