我是Android新手,使用了FragmentPageAdapter,它在使用时效果非常好,如下所示
public Fragment getItem(int position) {
if (position == 0) {
MenuItemFragment frag = new MenuItemFragment();
Bundle bundle = new Bundle();
bundle.putInt("pos", position);
frag.setArguments(bundle);
return frag;
} else if (position == 1) {
MenuItemFragment1 frag = new MenuItemFragment1();
Bundle bundle = new Bundle();
bundle.putInt("pos", position);
frag.setArguments(bundle);
return frag;
} else if (position == 2) {
MenuItemFragment2 frag = new MenuItemFragment2();
Bundle bundle = new Bundle();
bundle.putInt("pos", position);
frag.setArguments(bundle);
return frag;
}
return null;
}
所以在上面的代码中我需要为相应的位置充气MenuItemFragment。
我的问题是:是否可以根据某些条件动态添加片段。在这里,我的所有片段都具有相同的布局,但每个片段的数据都会发生变化。
我为上面的代码动态返回片段做了什么。如下。
public Fragment getItem(int position) {
if (SubMenuActivity.sMenuCategory.size() > 0) {
SubMenuActivity.sMenuCategory.clear();
}
MenuItemFragment frag = new MenuItemFragment();
try {
for (int j = 0; j < SubMenuActivity.sMenuCard.size(); j++) {
String category = SubMenuActivity.sMenuCard.get(j).mCategory;
String header = SubMenuActivity.sMenuFragHeader[position];
if (category.equalsIgnoreCase(header)) {
SubMenuActivity.sMenuCategory.add(SubMenuActivity.sMenuCard
.get(j));
}
}
} catch (Exception e) {
e.printStackTrace();
}
return frag;
}
这里的问题是,对于每个位置我都在向sMenuCategory添加数据。但是这里getItem(位置)第一次循环两次并清除位置为零时添加的数据,并保留位置为1时添加的数据并显示前两个片段的相同数据。
请帮我解决这个问题。清除每个位置的arrayList,以便按照不重复的列表包含数据。
答案 0 :(得分:1)
在你的寻呼机适配器内部保留和片段数组并动态更新它:
private ArrayList<Fragment> fragments = new ArrayList<Fragment>();
public <constructor>() {
MenuItemFragment frag = new MenuItemFragment();
Bundle bundle = new Bundle();
bundle.putInt("pos", 0);
frag.setArguments(bundle);
fragments.add(frag);
MenuItemFragment1 frag1 = new MenuItemFragment1();
Bundle bundle1 = new Bundle();
bundle.putInt("pos", 1);
frag1.setArguments(bundle1);
fragments.add(frag1);
MenuItemFragment2 frag2 = new MenuItemFragment2();
Bundle bundle2 = new Bundle();
bundle.putInt("pos", 2);
frag2.setArguments(bundle2);
fragments.add(frag2);
}
@Override
public Fragment getItem(int position) {
// TODO Auto-generated method stub
return fragments.get(position);
}
@Override
public int getCount() {
return fragments.size();
}
public void addFragment(Fragment fragment) {
fragments.add(fragment);
}
添加新片段只需调用:
adapter.add(<fragment>);
adapter.notifyDataSetChanged();