2014-01-20 28 views
1

进出口新的机器人,使用FragmentPageAdapter所以在上面的代码我需要膨胀MenuItemFragment相应的位置使用类似下面的添加页面到碎片页适配器动态

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; 
     }  

时工作完全正常当时。

我的问题是:是否有可能动态添加碎片取决于某些condidtion。这里我所有的片段都具有相同的布局,但每个片段的数据更改。

我对上述代码做了动态返回片段的操作。如下。

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.But这里的getItem(位置)的第一次循环两次,并清除时的位置是零添加的数据,并保持当位置为1时添加数据,并显示前两个片段的相同数据。

请帮我解决这个问题。清除每个位置的arrayList,以便按照不重复的列表包含数据。

回答

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();