在ListView中重用类似于convertView的自定义膨胀视图

时间:2012-09-17 08:24:51

标签: android android-layout

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

我已经获得了我需要的每个单独视图(例如,包含事件标题的框的视图以及它所在的时间),这些视图在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参数,可以让你检查当前行是否已经实例化,然后让你更新它的值。我所追求的是这个自定义视图的类似内容;理想情况下重复使用它而不是多次实例化它。

如果没有办法,最好的办法是什么?这些观点本身并不是特别复杂,但仍然设法使大多数设备瘫痪。

0 个答案:

没有答案