2013-02-16 65 views
0

我已經實現了Sherlock ActionBar帶有使用選項卡適配器的導航選項卡。下面是我的標籤適配器類:addToBackStack()與片段的實例化

public static class TabsAdapter extends FragmentPagerAdapter implements 
     ActionBar.TabListener, ViewPager.OnPageChangeListener 
{ 
    private final Context mContext; 
    private final ActionBar mActionBar; 
    private final ViewPager mViewPager; 
    private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>(); 

    static final class TabInfo 
    { 
     private final Class<?> clss; 
     private final Bundle args; 

     TabInfo(Class<?> _class, Bundle _args) 
     { 
      clss = _class; 
      args = _args; 
     } 
    } 

    public TabsAdapter(SherlockFragmentActivity activity, ViewPager pager) 
    { 
     super(activity.getSupportFragmentManager()); 
     mContext = activity; 
     mActionBar = activity.getSupportActionBar(); 
     mViewPager = pager; 
     mViewPager.setAdapter(this); 
     mViewPager.setOnPageChangeListener(this); 
    } 

    public void addTab(ActionBar.Tab tab, Class<?> clss, Bundle args) 
    { 
     TabInfo info = new TabInfo(clss, args); 
     tab.setTag(info); 
     tab.setTabListener(this); 
     mTabs.add(info); 
     mActionBar.addTab(tab); 
     notifyDataSetChanged(); 
    } 

    @Override 
    public int getCount() 
    { 
     return mTabs.size(); 
    } 

    @Override 
    public Fragment getItem(int position) 
    { 
     TabInfo info = mTabs.get(position); 
     return Fragment.instantiate(mContext,info.clss.getName(), 
       info.args); 

    } 

    public void onPageScrolled(int position, float positionOffset, 
      int positionOffsetPixels) 
    { 
    } 

    public void onPageSelected(int position) 
    { 
     mActionBar.setSelectedNavigationItem(position); 
    } 

    public void onPageScrollStateChanged(int state) 
    { 
    } 

    public void onTabSelected(Tab tab, FragmentTransaction ft) 
    { 
     Object tag = tab.getTag(); 
     for (int i = 0; i < mTabs.size(); i++) 
     { 
      if (mTabs.get(i) == tag) 
      { 
       mViewPager.setCurrentItem(i); 
      } 
     } 
    } 
    public void onTabUnselected(Tab tab, FragmentTransaction ft) 
    { 
    } 

    public void onTabReselected(Tab tab, FragmentTransaction ft) 
    { 
    } 
} 

我的問題是如何使用addToBackStack()Fragment.instantiate()(或是否有處理後退按鈕任何其他方式)?

回答

1

我的問題是如何與Fragment.instantiate或 任何其他方式使用addtobackstack處理後退按鈕

你真的不應該這樣做。如果您打算在ViewPager中使用帶有片段的標籤,則可以安全地假設用戶在使用該應用時可以切換/滑動很多標籤片段。如果退出按鈕在他想離開活動時重新創建他的步驟可能會非常令人沮喪(想象一下,在切換標籤15到20次後嘗試退出此活動)。

如果你真的想這樣做,那麼將用戶的導航路徑存儲在一個整數列表/數組中(當滑動/切換標籤存儲用戶已經去過的ViewPager頁面的整數位置時)。然後覆蓋活動的onBackPressed方法,並讓它彈出(每次單擊BACK按鈕時)上一個列表/數組的最後一個位置,將ViewPager移動到該位置(同時突出顯示正確的選項卡)。

+0

非常感謝您的建議.... – user1526671 2013-02-16 11:20:44