【问题标题】:Load a single Fragment with different arguments in navigation drawer在导航抽屉中加载具有不同参数的单个片段
【发布时间】:2018-09-23 05:31:33
【问题描述】:

假设我有一个导航抽屉,其中包含三个菜单项,即 cat1、cat2 和 cat3。每当用户点击它时,它会打开一个片段,该片段将从 Web 服务器获取数据并解析 JSON 数据并显示到回收器视图中。

现在我的问题是。 我是否需要为导航抽屉的每个菜单项(即 cat1、cat2 和 cat3)创建单独的片段?或者我可以使用一个片段并传递这样的参数 http://example.com?cat=1 到该片段并加载回收器视图项?

那么我应该遵循哪个过程来实现这个目标,为每个菜单项单独片段还是单个片段?谢谢。

【问题讨论】:

    标签: java android android-fragments


    【解决方案1】:

    如果您想在每次点击类别时获取数据,最好有一个片段并使其调用 API。但是如果你使用三个片段,除了更快的类别之间的切换之外,它还减少了 API 调用的数量。但是,它们之间存在权衡。同样在第二种情况下,您应该关心每次更新从 API 获取的内容。

    【讨论】:

    • 感谢您的回复。现在我明白了。
    【解决方案2】:

    您绝对应该使用单个片段并避免使用一些样板代码。这是您应该如何做的:

    public class CategoryFragment extends Fragment {
        public static CategoryFragment newInstance(int categoryId) {
            CategoryFragment fragment = new CategoryFragment();
            Bundle extras = new Bundle();
            extras.putInt("categoryId", categoryId);
            fragment.setArguments(extras);
            return fragment;
        }
        ...
        // Determine which category you're on
        private int getCategoryId() {
            return getArguments().getIntExtra("categoryId", 1);
        }
    }
    

    要实例化您的片段,您可以简单地使用:

    // Construct a cat2 fragment
    CategoryFragment categoryFragment = CategoryFragment.newInstance(2);
    

    【讨论】:

      【解决方案3】:

      在这种情况下,您应该只使用一个片段,这是您可以通过为每个类别 cat1、cat2、cat3 仅使用一个片段来重用设计和代码的方法。 您可以通过捆绑将类别 ID 传递给片段。查看this教程

      【讨论】:

      • 是的,我是这么认为的。因此,为每个类别制作一个新片段需要更多文件。谢谢你的回答。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多