我感兴趣地阅读了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
的视图
答案 0 :(得分:1)
您的inflater不是静态的,您的适配器和您的活动将在同一时间被销毁。通常你的上下文是活动,所以如果你不在setListAdapter以外的地方保留你的适配器的引用,我就不会发现任何问题。