为了快速完成,我将解释我的实现,然后问题=):
我有一个对象:
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中的适配器迭代移除侦听器更好?
由于
答案 0 :(得分:0)
是的,有一个更好的方法:不要在你的对象上设置这样的监听器,这个监听器有对视图的引用。
相反,您只需修改模型(MyClass),然后在ArrayAdapter上调用adapter.notifyDatasetChanged()。然后ListView将重绘。