我目前正在开发一个包含时间表屏幕的应用程序,该屏幕以高度定制的方式构建并包含许多“重复”视图。
我已经在 XML 中设置了我需要的每个单独的视图(例如,一个包含事件标题和时间的框的视图),我在自定义视图类中对其进行了扩展。例如:
public class EventCell extends RelativeLayout {
private TextView eventTitle;
private TextView eventTime;
private Button favouritesButton;
public EventCell(Context context) {
super(context);
setupView(context);
}
public EventCell(Context context, AttributeSet attrs) {
super(context, attrs);
setupView(context);
}
private void setupView(Context context) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.timetable_event, this);
eventTitle = (TextView) findViewById(R.id.event_title);
eventTime = (TextView) findViewById(R.id.event_time);
favouritesButton = (Button) findViewById(R.id.favourites_button);
}
...
}
这很好,除了这个视图在其包含的活动中被重用了很多。例如,它可能被实例化 50 次。我的问题是这会浪费大量内存并导致某些设备崩溃。
在 ListViews 中,有一个 getView() 方法,它提供了一个 convertView 参数,可让您检查当前行是否已被实例化,然后让您更新其上的值。对于这个自定义视图,我所追求的是类似的东西;理想情况下重用它而不是多次实例化它。
如果没有办法,绕过它的最佳方法是什么?这些视图本身并不是特别复杂,但似乎仍然设法使大多数设备屈服。