我是 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。
我的问题是:是否可以根据某些条件动态添加 fragment 。在这里,我所有的 fragment 都具有相同的布局,但每个 fragment 的数据都会发生变化。
我为上面的代码做了什么来动态返回 fragment 。如下。
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(position) 第一次循环两次并清除位置为零时添加的数据,并保留位置为一时添加的数据并为前两个 fragment 显示相同的数据。
请帮我解决这个问题。清除每个位置的 arrayList,以便按照不重复的列表包含数据。
最佳答案
在您的寻呼机适配器中保留 fragment 数组并动态更新它:
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);
}
要添加新 fragment 只需调用:
adapter.add(<fragment>);
adapter.notifyDataSetChanged();
关于android - 动态添加页面到 Fragment Page Adapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21234647/