0

我有一个带有两个片段的测验应用程序,用于我在 ViewPager 中拥有的两种测验模式。对于每个片段,除了其他内容之外,我还通过在遍历所有类别的 while 循环中从 XML 膨胀线性布局来动态创建一个列表。包含此列表的布局在两种模式下都是相同的,只是片段的其余部分不同,因此需要两个单独的页面。

因此,问题是我做了两次膨胀布局的代价高昂的过程,每个片段内一次。我只想这样做一次并使用它两次。

我考虑过的两种解决方案:

  • 在父活动中使用适配器,通过片段访问它,然后使用 ExpandableListView。

问题:

  1. 我使用复选框来选择类别。这两个片段对点击的处理方式不同。以我有限的知识,我不知道如何实现这一目标。我知道我可以扩展自定义布局,但是如何在片段中设置侦听器?
  2. 我的一些类别是分组的,其他是独立的项目。如何删除这些项目中的箭头?

.

  • 在父活动中使用数组列表。在每个片段中访问它并以这种方式将布局添加到父级。

问题:

  1. 不能这样做,因为我添加了两次相同的视图,所以我收到错误,因为指定的孩子已经有一个父母。(非法状态异常)

但是,这确实意味着我可以轻松访问 CheckBoxes 并遍历设置 oncheckedchangedlisteners

提前非常感谢您:)如果您需要更多信息或其他任何信息,请询问!

4

1 回答 1

1

我通过在遍历所有类别的 while 循环中从 XML 膨胀线性布局来动态创建一个列表。

这表明一个ListView.

在父活动中使用数组列表。在每个片段中访问它并以这种方式将布局添加到父级。

此解决方案从一开始就不起作用,因为您在 a 中有两个片段,ViewPager它们会施加不同的行为。如果片段不在其中,ViewPager您可以构建一种机制,将这些视图存储在列表中,然后从片段视图中动态分离//附加它们。但是将视图存储在列表中(并一直将它们保存在内存中)加上管理它们的状态的麻烦是不值得的。

在父活动中使用适配器,通过片段访问它,然后使用 ExpandableListView。

为什么只使用一个适配器而不是两个,每个片段一个(所以它们是独立的)?我还将在片段本身中实现适配器。

我使用复选框来选择类别。这两个片段对点击的处理方式不同。以我有限的知识,我不知道如何实现这一目标。我知道我可以扩展自定义布局,但是如何在片段中设置侦听器?

不太确定,但是如果您正在谈论CheckBoxe从“行”布局访问并基于两个片段对用户操作具有不同的行为,则可以非常轻松地实现基适配器类。该基适配器类将处理通用逻辑,但您还将有一个在CheckBox操作上调用的抽象方法(在 中OnCheckedChangeListener)。该基本适配器的两个子类(用于两个片段)将各自实现该抽象方法,并具有各自独立的逻辑。

我的一些类别是分组的,其他是独立的项目。如何删除这些项目中的箭头?

像上面一样,这可以通过实现一个智能适配器来完成。

于 2013-01-18T18:24:49.267 回答