对于模糊标题的道歉,但这有点难以解释......虽然我会尽我所能!
我有一个任务是在应用程序屏幕上复制某些特定的功能,因此虽然执行此操作的方法可能看起来很奇怪,但是没有允许从特定任务变化。
首先,从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...>
所以基本上只是一个标题列表和sub_heading信息的简要描述。例如,这可能如下所示:
Food
Sticky Date Pudding is a...
Chocolate Cake tastes...
Ice Cream can be...
Pizza is often...
Pasta once was...
Burgers are...
现在,奇怪的是,当您看到子标题详细信息列表时,当您单击其中任何一个时,您将进入一个屏幕,该屏幕显示来自同一名称的每个子标题的信息。换句话说,单击食物(布丁/蛋糕/冰淇淋)下的前3个子标题描述将带您到子标题名称“甜点”下的另一页,同时在同一页面上列出所有3个描述,同时点击最后3个(披萨/意大利面/汉堡包)将带您到另一个页面,子标题名称为“主要”。因此,您会以一种看似无序的方式在大列表中看到所有子标题描述,但它们按隐藏的子标题名称分组,只有在您单击它们以进入下一页时才会显示这些名称。
所以现在我的问题是......为了创建这样的列表,存储和引用从数据库中检索的数据的最佳方法是什么?我已经尝试了一些地图,树图,自定义类,列表等等的变体,但是在这个过程中,所有这些都似乎都会在某些时候出现(毫无疑问,因为我没有正确使用它们!)。
我希望我有一些代码可以粘贴,但是我现在甚至不知道从哪里开始都是如此混乱。关于如何完成这样的事情的任何甚至模糊的建议将不胜感激!
谢谢!
答案 0 :(得分:1)
您似乎具有三层结构,其中只有两层直接由用户可见。你的散文中的这种分层结构的一个例子是:
食物 - &gt;甜点 - &gt;布丁
就本回答而言,我将称之为topLevel
,midLevel
和detail
层。我没有最模糊的概念,这是如何映射到你的条款的,因为你的散文暗示了这两个&#34; Dessert&#34;和&#34;布丁&#34;是&#34;小标题&#34;,它混淆了水域。如果&#34;布丁&#34;出现在用户界面中,&#34;甜点&#34;不是,它们是不同的东西,应该在数据模型中这样对待。
因此,这似乎是三个数据库表,每个层一个,具有经典的1:N外键关系(即midLevel
表有一列包含topLevel
的键包含它)。或者,将整个树表示保存在单独的文件中,采用JSON或XML格式,而不是数据库。
从内存数据表示中,TopLevel
包含MidLevel
个对象的集合,每个对象都有Detail
个对象的集合(再次,使用我的术语,而不是你的)。
就UI而言,由于您已选择仅显示两个层,因此可以使用ExpandableListView
,TopLevel
个实例驱动父节点和Detail
个对象的聚合集合(用于驱动子节点的MidLevel
中的所有TopLevel
个对象。
您所需的用户界面存在的问题是,您必须在内存中所有 TopLevel
,MidLevel
和Detail
个对象,至少要知道他们的父子关系和足够的数据来驱动ExpandableListView
UI的程度。如果您的数据模型很大,这将是昂贵的。