我的应用程序在主屏幕上有10个项目。他们每个人都有不同的子类别(例如,第1项,第5项,第8项,第3项)
我的问题是解决此问题的最佳实践。
我已经尝试过的是使用片段页面适配器加载页面(类别),但是它似乎无法解决我的问题。
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return x.newInstance();
case 1:
return y.newInstance();
case 2:
return z.newInstance();
default:
return null;
}
}
最佳答案
您能否提供更多详细信息?您是否将“选项卡”称为项目?
每个类别是否都由同一班级预设?因为如果是这样,那么请为newInstance方法提供参数,在其中您可以指定类别和所需的项目数,如下所示:
public class Frag_UserItems extends Fragment {
...
public static MyFragment newInstance (int itemsNumber, Category category){
// assuming category is an enum
Bundle bundle = new Bundle();
MyFragment fragment = new MyFragment();
bundle.setInt("num", itemsNumber);
bundle.setString("category", category.toString());
fragment.setArguments(args);
return fragment;
}
...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_user_items, container, false);
//fetch the arguments and get the data from the reposotry
// and filter them how you want
Bundle args = getArguments();
int num = args.getInt("num");
String num = args.getString("category");
List<MyItem> items = ...
// bind view..
initview(rootView, items);
return rootView;
}
}
认为您也可以将片段实例存储在数组中,或者可以将索引号传递给newInstance方法,然后在该处根据索引创建片段,这样它将把getItem减少为:
@Override
public Fragment getItem(int position) {
return MyFragment.newInstance(position);
}
public class Frag_UserItems extends Fragment {
...
public static MyFragment newInstance (int position){
// assuming category is an enum
Bundle bundle = new Bundle();
MyFragment fragment = new MyFragment();
bundle.setInt("num", position);
fragment.setArguments(args);
return fragment;
}
...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_user_items, container, false);
//fetch the arguments and get the data from the reposotry
// and filter them how you want
Bundle args = getArguments();
int num = args.getInt("num");
List<MyItem> items = ...
// bind view..
initview(rootView, items);
return rootView;
}
}
这基本上是遵循Factory方法模式的。
我希望这有帮助