[英]Load a single Fragment with different arguments in navigation drawer
假设我有一个导航抽屉,其中包含三个菜单项,即cat1,cat2和cat3 。 每当用户单击此按钮时,它将打开一个片段,该片段将从Web服务器中获取数据并解析JSON数据并显示在回收者视图中。
现在我的问题是。 我是否需要为导航抽屉的每个菜单项(即cat1,cat2和cat3)创建单独的片段? 或者,我可以使用一个片段,并将类似http://example.com?cat=1
的参数传递给该片段,然后加载回收站视图项?
那么,要实现该目标,我应该遵循哪个程序,每个菜单项使用单独的片段,或者使用单个片段? 谢谢。
在这种情况下,您仅应使用一个片段,这是通过对类别cat1,cat2,cat3仅使用一个片段来复用设计和代码的方法。 您可以通过捆绑包将类别ID传递给片段。 检查本教程
如果您想在每次单击类别时获取数据,最好有一个片段并将其调用API。 但是,如果使用三个片段,则除了可以更快地在类别之间切换之外,还可以减少API调用的次数。 但是,它们之间需要权衡。 同样在第二种情况下,您应该关心每次更新从API获取的内容。
您绝对应该使用单个片段,并避免使用一些样板代码。 这是您应该如何做:
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.