【问题标题】:How to store all child fragment classes to the parent class' instance如何将所有子片段类存储到父类的实例
【发布时间】:2019-03-03 12:32:07
【问题描述】:

我正在开发一个类似于“主页”的功能,其中有一个主要的Fragment,并在其布局中添加了几个其他片段,构成了内容页面。我希望主片段类能够实例化从某个父片段类继承的所有片段类。这样代码会更加动态,而不是在我的 xml 文件中添加一堆 <fragment> 标签。

我有点坚持构建一个体面的架构。您将如何继续这样做?

更新: 这就是我基本上想要做的,但不知道如何做:

public class FeedFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
        View parentView = inflater.inflate(R.layout.fragment_home, container, false);

        // Get fragments and dynamically add them to
        // the FeedFragment's layout
        getEntryFragmentsList();
        // ...

        return parentView;
    }
}

public abstract class FeedEntryFragment extends Fragment {
   // Somehow add fragment to list of entry fragments
}

public class TestFragment extends FeedEntryFragment {
    // Already added to list of entry fragments
}

【问题讨论】:

  • 请贴一些代码。

标签: java android android-fragments architecture


【解决方案1】:

我认为不可能通过继承来减少 xml 的数量。我认为您应该尝试拆分您的 xml 配置并使用一些 <merge><include> 从各个部分构建完整的配置。

如果您能更详细地描述您的问题,我可能会提供更多帮助。

【讨论】:

  • 当然。因此,我基本上希望动态添加构成家庭提要内容的 FeedEntryFragments,以便为用户定制内容。假设有 10 个实现 FeedEntryFragment 的类,它们有不同的类别,例如“推荐”、“趋势”。我可以通过在提要片段的代码中添加一堆新的 XYEntryFragment() 来解决这个问题,但我不确定这是否是一个优雅的解决方案。因此,我希望在主片段中看到从 FeedEntryFragment 继承的类,而无需手动实例化所有这些类。
【解决方案2】:

您应该使用FrameLayout 通过FragmentTransaction 动态添加片段。

您还可以使用带有标签或底部标签的ViewPager 来显示多个片段。请查看我的Dynamic Support 库中的sample 以获取完整代码。


抽象片段
DynamicFragment - 来自动态支持库的抽象基本片段。 DynamicViewPagerFragment - 扩展 DynamicFragment 以实现 ViewPager 功能的抽象片段。

实现
HomeFragment - 示例片段扩展了 DynamicFragment 以实现主屏幕。 SettingsFragment - 示例片段扩展了 DynamicViewPagerFragment 以使用视图寻呼机内的多个片段实现设置功能。

教程实现
这更适合您的需要。 TutorialActivity 返回要在 ViewPager 中显示的片段列表。

DynamicSimpleTutorial 根据提供的参数生成DynamicTutorialFragment

【讨论】:

  • 抱歉,我的问题没有说清楚。我没有将现有片段添加到另一个片段的问题。我的问题是我不知道如何“自动”从主 FeedFragment 实例化从 FeedEntryFragment 继承的所有片段类,而不会用一堆新的 XYEntryFragment() 污染我的代码。
  • @Cerberos 我添加了教程实现以更好地解释您的需求。
猜你喜欢
  • 2020-07-05
  • 1970-01-01
  • 2021-11-01
  • 1970-01-01
  • 2013-06-10
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 1970-01-01
相关资源
最近更新 更多