私はSQLiteデータベースから取得しているオブジェクトのリストが長いです。簡略化のため、Event
オブジェクトのプロパティがDate
,Name
、およびLocation
であるとします。Expandable ListView年/月単位で項目をグループ化する
私は、以下のリストアダプタを使用し、Date
でソートデータベースからEvent
Sを取り出す時系列ListView
Event
のSを持つことができます。
public class ImageListButtonListAdapter extends ArrayAdapter<ImageListButtonListItem> {
public ImageListButtonListAdapter(Context c, List<ImageListButtonListItem> items) {
super(c, 0, items);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageListButtonView itemView = (ImageListButtonView)convertView;
if (null == itemView)
itemView = ImageListButtonView.inflate(parent);
itemView.setItem(getItem(position));
return itemView;
}
@Override
public void notifyDataSetChanged() {
super.notifyDataSetChanged();
}
}
これまでのところ、とても良いです。今このリストは非常に長く、ExpandableListView
を使用してリストをさらに構造化し、Event
個のアイテムを月ごとにグループ化したいと思います。例私は、BaseExpandableListAdapter
から派生したリストアダプターを作成するのが一般的に定義済みのグループとグループ名を含んでいることを発見しました。私はちょうど(ジョーダ時間)LocalDate
を含んでいる1つの大きなグループのグループを持っています。それに基づいてソートに使用できる計算されたプロパティYearMonth
を追加することができます。
私の最初の考えは、リスト全体をアダプターに渡し、アダプターにグループを決定させ、アダプターの作成時にグループに項目を割り当てることでした。しかし、リスト全体をこのように処理すること、グループを作成してリストを表示する前にこれらのグループにアイテムを割り当てることは、すでにパフォーマンスに敏感なビューではコストのかかるプロセスになります。
私はこれがかなり一般的なシナリオであると想像することができ、それを解決するよりエレガントな方法があります。最善のアプローチは何でしょうか?
あなたも質問にあなたのデータモデルのコードを追加することができます。 'ListView'に入れる前に正しい方法でデータを注文できないのですか? – Darwind
はい、それは私のアプローチでした。私はLollipop以降で何とか働くようにしました。古いデバイスでは、リストはまだ空です。私はコードのいくつかをきれいにして、しばらくの間それを質問に追加します。ありがとう。 – jerry
質問を現在のコードで更新しました。私はこの断片がデータモデルに関する十分な情報を明らかにし、過剰な量のコードを投稿するのを避けることを願っています。 – jerry