如何避免在ArrayAdapter中泄漏上下文

时间:2010-09-28 12:59:30

标签: java android

我感兴趣地阅读了Avoiding Memory Leaks文章,并担心对上下文对象的引用。我有一个类似以下的课程。

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的视图

1 个答案:

答案 0 :(得分:1)

您的inflater不是静态的,您的适配器和您的活动将在同一时间被销毁。通常你的上下文是活动,所以如果你不在setListAdapter以外的地方保留你的适配器的引用,我就不会发现任何问题。