2014-01-20 61 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();