我查看了几个这样的主题,但没有看到如何解决我的问题
我有一个resturant说..用动态的类别数量..我把所有类别放在一个列表..并从这些类别创建片段
所以我不能
案例0:fragment0 案例1:frament 1
因为我不知道我有多少类别,直到运行时
class MyPageAdapter extends FragmentStatePagerAdapter {
private List<MyFragment> fragments = new ArrayList<>();
private List<menuCat> Categories = new ArrayList<>();
public MyPageAdapter(FragmentManager fm, List<menuCat> Categories) {
super(fm);
this.Categories = Categories;
for (int i = 0; i<Categories.size();i++)
{
fragments.add(MyFragment.newInstance(Categories.get(i)));
}
}
@Override
public String getPageTitle(int position)
{
return Categories.get(position).catName();
}
@Override
public MyFragment getItem(int position) {
return this.fragments.get(position);
}
@Override
public int getCount() {
return this.fragments.size();
}
MyFragment.class
public class MyFragment extends Fragment {
public static final MyFragment newInstance(menuCat category)
{
Bundle bun = new Bundle();
bun.putString("category", category.toJson());
MyFragment f = new MyFragment();
f.setArguments(bun);
return f;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_my, container, false);
String json = getArguments().getString("category");
menuCat category = menuCat.fromJson(json);
System.out.println(category.catName());
ArrayList<Card> cards = new ArrayList<Card>();
for(menuItem item : category.getItems())
{
Card card = new Card(getActivity());
// Create a CardHeader
CardHeader header = new CardHeader(getActivity());
// Add Header to card
header.setTitle(item.getName());
card.setTitle(item.getPrice());
card.addCardHeader(header);
CardThumbnail thumb = new CardThumbnail(getActivity());
//thumb.setDrawableResource(listImages[i]);
//card.addCardThumbnail(thumb);
cards.add(card);
}
CardArrayAdapter mCardArrayAdapter = new CardArrayAdapter(getActivity(), cards);
CardListView listView = (CardListView) getActivity().findViewById(R.id.myList);
if (listView != null) {
listView.setAdapter(mCardArrayAdapter);
}
return v;
}
}
这是我的适配器,我的问题是例如
如果我在第1页并且我需要第3页数据..如果我将转到第2页..它将显示第3页的数据或如果我转到第5页然后向后转到...到4它也将显示第3页的数据..我的意思是它让我像下一页的数据而不是当前的数据。
答案 0 :(得分:0)
在构造函数中创建所有片段是非常差的设计,因为您正在创建对这些对象的引用,这些对象稍后将附加到Activity
,但是当它们被分离时,您继续保持参考资料。最后,这会让你对内存泄漏感到很沮丧。
是否无法简单地删除fragments
并将您的方法更改为以下内容:
@Override
public MyFragment getItem(int position) {
return MyFragment.newInstance(Categories.get(position));
}
@Override
public int getCount() {
return Categories.size();
}
我不确定这会解决你所有的问题,但这是一个开始。