私は現在、高度にカスタマイズされた方法で構築され、多くの「繰り返し」ビューを含む時刻表画面を含むアプリに取り組んでいます。
必要な個々のビュー (イベントのタイトルと開催時間を含むボックスのビューなど) を 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 には、現在の行が既にインスタンス化されているかどうかを確認し、その値を更新できる convertView パラメータを提供する getView() メソッドがあります。私が求めているのは、このカスタム ビューでも同様です。何度もインスタンス化するのではなく、理想的には再利用します。
方法がない場合、それを回避する最善の方法は何ですか? ビュー自体は特に複雑ではありませんが、ほとんどのデバイスを屈服させることができているようです.