我的应用程序在主屏幕上有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方法模式的。

我希望这有帮助

09-27 22:48