对模糊的标题表示歉意,但这有点难以解释......尽管我会尽力!
我的任务是在应用程序屏幕上复制某些特定功能,因此虽然完成此操作的方法可能看起来很奇怪,但不允许改变特定任务。
首先,从 SQLite 数据库检索所有数据。这个检索部分是没有问题的。数据库中可用的列是:
pk (primary key)
heading_id
heading_name
sub_heading_name (can be duplicated on multiple rows with different contents)
sub_heading_contents
最终屏幕应显示以下内容:
<heading_name>
<clickable List(View?) of abbreviated sub_heading_contents>
<next heading_name>
<next clickable list>
<etc...>
所以基本上只是一个标题列表和子标题信息的简短描述。例如,这可能看起来像:
Food
Sticky Date Pudding is a...
Chocolate Cake tastes...
Ice Cream can be...
Pizza is often...
Pasta once was...
Burgers are...
现在,奇怪的是,当您看到子标题详细信息列表时,当您单击其中任何一个时,您会进入一个屏幕,其中显示同名的每个子标题的信息。换句话说,点击食物(布丁/蛋糕/冰淇淋)下的前 3 个子标题描述将带您进入子标题名称“甜点”下的另一个页面,所有 3 个描述都列在同一页面上,同时单击最后 3 个(披萨/意大利面/汉堡)会将您带到子标题名称为“Mains”的不同页面。因此,您会以看似无序的方式在一个大列表中看到所有子标题描述,但它们是按隐藏的子标题名称分组的,只有在单击它们进入下一页时,这些子标题名称才会出现。
所以我现在的问题是...存储和引用从数据库检索的数据以创建这样的列表的最佳方法是什么?我尝试过 map 、树形图、自定义类、列表等的一些变体,但所有这些似乎都在过程中的某个时刻失败了(毫无疑问,因为我没有正确使用它们!)。
我希望我能粘贴一些代码,但现在一切都那么困惑,我什至不知道从哪里开始。任何关于如何完成这样的事情的模糊建议将不胜感激!
谢谢!
最佳答案
您似乎有一个三层结构,其中只有两层是用户直接可见的。您的散文中的这种分层结构的一个示例是:
食物 -> 甜点 -> 布丁
出于本答案的目的,我将这些称为 topLevel
, midLevel
,和detail
层。我不知道这如何映射到你的术语,因为你的散文表明“甜点”和“布丁”都是“副标题”,这使水变得浑浊。如果“Pudding”出现在 UI 中,而“Dessert”没有出现,则它们是不同的事物,应该在数据模型中进行同样的处理。
因此,这似乎是三个数据库表,每一层一个,具有经典的 1:N 外键关系(即 midLevel
表有一列包含包含它的 topLevel
的键) 。或者,将整个树表示形式保存在单独的文件中(采用 JSON 或 XML 格式),而不是数据库中。
根据内存中的数据表示,TopLevel
拥有 MidLevel
的 Collection 对象,每个对象都有 Detail
的集合对象(再次,使用我的术语,而不是你的术语)。
就 UI 而言,由于您选择仅显示两层,因此您可以使用 ExpandableListView
,与 TopLevel
驱动父节点的实例和 Detail
的聚合集合驱动子节点的对象(对于 MidLevel
中的所有 TopLevel
对象)。
您想要的 UI 的问题是您必须拥有 TopLevel
的全部 , MidLevel
,和Detail
内存中的对象,至少达到了解其父子关系和足够的数据来驱动 ExpandableListView
的程度用户界面。如果您的数据模型很大,这将会很昂贵。
关于java - 动态生成标题,其中可单击列表项显示分组内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20940812/