为了加快速度,我将解释我的实现,然后问题=):
我有个目标:
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将重新绘制。