为了加快速度,我将解释我的实现,然后问题=):
我有个目标:

Class myClass{
  ......attrs......
  ......getters and setters......

  public void setOnMyClassChangeListener(MyClassChangeListener listener){
      this.listener=listener;
  }
}

以及一个ListView,它使用ArrayAdapter中的方法监视该类的对象:
static class ViewHolder {
        View view1,view2,view3.....;
    }

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

    final ViewHolder holder;
    View rowView = convertView;
    if (rowView == null) {
        LayoutInflater inflater = (LayoutInflater) getContext()
             .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        rowView = inflater.inflate(R.layout.templaterow, null, true);
        holder = new ViewHolder();
        holder.view1=.....;
        holder.view2=.....;
        holder.view3=.....;
        rowView.setTag(holder);
    } else {
        holder = (ViewHolder) rowView.getTag();
    }
    MyClass object= items.get(position)
    object.setOnMyClassChangeListener(MyClassChangeListener(){
          public void onMyClassChangeListener(MyClass obj){
               holder.view1.setXX(obj.getValue1());
               holder.view2.setXX(obj.getValue2());
               ......
          }
    }
    );
}

所以我想我是在泄漏内存,因为监听器在退出listactity后保持设置,然后持有者被泄漏了,对吧?
是否有一种方法比在onstop中迭代适配器来删除侦听器更好?
谢谢

最佳答案

是的,有一个更好的方法:不要在对象上设置这样一个侦听器,该对象具有对视图的引用。
相反,您只需修改模型(MyClass),然后在ArrayAdapter上调用adapter.notifyDataSetChanged()。然后ListView将重新绘制。

10-07 19:24
查看更多