我有一个非常简单的ToDo列表应用程序,其中包含用户可以添加项目的多个类别。架构看起来像这样:
http://i.imgur.com/WA3dtcU.png
我正在使用ViewPager,每个视图都是我在ViewPagerAdapater中实例化的片段:
public Fragment getItem(int i) {
ToDoCategoryModel cat = categories().get(i);
ToDoCategoryView view = ToDoCategoryView.newInstance(cat);
return view;
}
在这些类别中,用户可以将新的项目碎片添加到线性布局中。
虽然发生了一件非常奇怪的事情。我从类别1(C1)开始,目前列表中有1个项目。然后滚动到C2然后再次滚动到C3。然后我滚回到C2。 ViewPager要求我的ViewPagerAdapter重新创建C1,因为它在滚动2页之后就被销毁了。这很好,我只是创建一个全新的片段(如上面的代码所示)。但是,当我现在滚动回C1时,而不是显示1个项目(如您所料),显示了2个项目。它们是彼此重复的。
我用来将Item片段添加到Category片段的代码是:
public void addToDoItem(ToDoItemModel model) {
ToDoItemView newItem = ToDoItemView.newInstance(model, this);
getChildFragmentManager().beginTransaction().add(_linearLayout_items.getId(), newItem, "sameTag"+count++).commit();
}
如果我更改此代码以添加新的TextView而不是片段:
public void addToDoItem(ToDoItemModel model) {
ToDoItemView newItem = ToDoItemView.newInstance(model, this);
TextView tv = new TextView(getActivity());
tv.setText(newItem.getModel().getName());
_linearLayout_items.addView(tv);
}
工作正常!没有显示重复的项目。
那么在视图寻呼机中使用子片段管理器动态添加片段有什么问题?
感谢。