在导航抽屉中加载具有不同参数的单个片段

时间:2018-09-23 05:31:34

标签: java android android-fragments

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

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

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

[
  {
   .... # project data,
   agents = [1,2,3,4,5,...], # primary keys of Agents
  },
  {
   .... # project data,
   agents = [1,2,3,4,5,...], # primary keys of Agents
  },
]

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

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);
    }
}