我目前正在开发一个包含时间表屏幕的应用,该屏幕以高度自定义的方式构建,并包含大量“重复”视图。
我已经获得了我需要的每个单独视图(例如,包含事件标题的框的视图以及它所在的时间),这些视图在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参数,可以让你检查当前行是否已经实例化,然后让你更新它的值。我所追求的是这个自定义视图的类似内容;理想情况下重复使用它而不是多次实例化它。
如果没有办法,最好的办法是什么?这些观点本身并不是特别复杂,但仍然设法使大多数设备瘫痪。