3

我目前正在开发一个包含时间表屏幕的应用程序,该屏幕以高度定制的方式构建并包含许多“重复”视图。

我已经在 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 参数,可让您检查当前行是否已被实例化,然后让您更新其上的值。对于这个自定义视图,我所追求的是类似的东西;理想情况下重用它而不是多次实例化它。

如果没有办法,绕过它的最佳方法是什么?这些视图本身并不是特别复杂,但似乎仍然设法使大多数设备屈服。

4

0 回答 0