2010-09-28 53 views
1

我感兴趣地阅读了Avoiding Memory Leaks文章,并关注对上下文对象的跳转引用。我有一个类如下。如何避免在ArrayAdapter中泄漏上下文

public class MessageAdapter extends ArrayAdapter<Message> { 

    private ArrayList<Message> items; 
    private LayoutInflater inflater; 
    public MessageAdapter(Context context, int textViewResourceId, ArrayList<Message> items) { 
     super(context, textViewResourceId, items); 
     this.items = items; 
     inflater = LayoutInflater.from(context); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
      View v = convertView; 
      if (v == null) { 
       v = inflater.inflate(R.layout.message_row, null); 
      } 
      Message o = items.get(position); 
      if (o != null) { 
       TextView content = (TextView) v.findViewById(R.id.content); 
       TextView date = (TextView) v.findViewById(R.id.date); 
       content.setText(Html.fromHtml("<b>" + o.getSender() + "</b>: " + o.getContent().replace("\n", "<br/>"))); 
       date.setText(o.getReceived().toString()); 
      } 
      return v; 
    } 
} 

是否有问题需要引用LayoutInflater对象,因为它必须以某种方式使用上下文对象?对于我在这里要做的事情,有没有更好的设计模式? (只使用上下文来初始化XML;从那时起,只使用传入的视图到getView

+0

顺便说一句,保存视图不起作用;有人回答说,它真的搞砸了布局。 – I82Much 2010-09-28 14:41:50

回答

1

您的inflater不是静态的,您的适配器和您的活动将在同一时间被销毁。通常情况下,你的上下文是活动,所以如果你没有在setListAdapter之外的其他适配器上保留引用,我不会看到任何问题。