BB 10 で動的データを使用して折りたたみ可能なリストを実装する必要があります。このために、Github で提供されている FilteredDataModel の例を使用しています。現在、例ではすべてのデータがハードコードされていますが、ListView では動的にデータを入力する必要があります。
たくさん検索しましたが、何も得られませんでした。
BB 10 で動的データを使用して折りたたみ可能なリストを実装する必要があります。このために、Github で提供されている FilteredDataModel の例を使用しています。現在、例ではすべてのデータがハードコードされていますが、ListView では動的にデータを入力する必要があります。
たくさん検索しましたが、何も得られませんでした。
その例を見てみると、ハードコーディングされたデータは、VegetablesDataModel::data 関数にあります。これが、動的データに置き換えたいデータです。
まず、データをどのように保存するかを考える必要があります。リストにはヘッダーがあり、各ヘッダーにはサブリストがあります。項目のヘッダーとサブリストを表す 1 つの方法は、
QPair<QString, QList<QString> >
QPair::first はヘッダーになり、QPair::second はサブアイテムのリストになります。
タイプを簡単にするために、typedef を使用できます。
typedef QPair<QString, QList<QString> > SubList;
次に、ListView 内のすべてのデータを表すには、上記の SubList 構造体のリストが必要です
QList<SubList>
次に、VegetablesDataModel によってデータが返される方法を置き換えます。上記の項目リストについて、VegetablesDataModel に新しいメンバー変数を追加します。
QList<SubList> m_listData.
後は、VegetablesDataModel::data および VegetablesDataModel::childCount 関数の内容を置き換えるだけです。
QVariant VegetablesDataModel::data(const QVariantList& indexPath)
{
QString value;
if (indexPath.size() == 1) { // Header requested
int header = indexPath[0].toInt();
return m_listData[header].first; // Return the header name
}
if (indexPath.size() == 2) { // 2nd-level item requested
const int header = indexPath[0].toInt();
const int childItem = indexPath[1].toInt();
return m_listData[header].second[childItem]; // Return the matching sublist item.
}
qDebug() << "Data for " << indexPath << " is " << value;
return QVariant(value);
}
これでデータが処理されますが、listView に要素の数を伝える必要があります。
int VegetablesDataModel::childCount(const QVariantList& indexPath)
{
const int level = indexPath.size();
if (level == 0) { // The number of top-level items is requested
return m_listData.length();
}
if (level == 1) { // The number of child items for a header is requested
const int header = indexPath[0].toInt();
return m_listData[header].second.length();
}
// The number of child items for 2nd level items is requested -> always 0
return 0;
}
他のすべてが同じままでよいはずです。あとは、必要なデータを m_listData に入力するだけです。コードをテストする機会がないため、スペルミスに気をつけてください。ただし、ロジックはそこにあるはずです。