在两个片段中两次使用相同的视图

时间:2013-01-18 17:27:28

标签: android android-layout android-fragments

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

问题因此是我在每个片段中进行两次夸大布局的代价高昂的过程。我只想这样做一次并使用它两次。

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

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

问题:

  1. 我使用复选框来选择类别。这两个片段以不同方式处理点击。凭借我有限的知识,我不知道如何实现这一目标。我知道我可以膨胀自定义布局但是如何在片段中设置监听器?
  2. 我的某些类别已分组,其他类别为独立项目。如何删除这些项目中的箭头?
    • 在父活动中使用arraylist。在每个片段中访问它并以这种方式将布局添加到父级。

    问题:

    1. 无法执行此操作,因为我正在添加相同的视图两次,因此我收到错误,因为指定的子项已经有父项。 (IllegalStateException异常)
    2. 但这确实意味着我可以轻松访问CheckBox并迭代设置oncheckedchangedlisteners

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

1 个答案:

答案 0 :(得分:1)

  

我通过从XML中扩展linearlayouts来动态创建列表   在一个循环中循环遍历所有类别。

这表示ListView

  

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

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

  

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

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

  

我使用复选框来选择类别。这两个片段处理   点击不同。由于我的知识有限,我不知道如何   实现这一点。我知道我可以膨胀自定义布局但是然后   如何在片段中设置监听器?

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

  

我的一些类别已分组,其他类别是独立项目。怎么做   我删除了这些项目中的箭头?

如上所述,这可以通过实施智能适配器来完成。