3

我正在使用ActionBarSherlock並將this pattern用於我在android開發人員網站上找到的標籤導航。它工作的很好,但我也希望能夠在NAVIGATION_MODE_TABSNAVIGATION_MODE_LIST之間切換,以保留選項卡和片段之間的關聯。在標籤導航和列表導航之間切換

上面提到的模式對於保留泛型代碼非常有用。所以,我有特異片段添加偵聽我的標籤和關聯他們是這樣的:

bar.addTab(bar.newTab() 
.setText("MyFragment") 
.setTabListener(new TabListener<SomeFragment>(this, "myfargment", SomeFragment.class))); 

和實例化片段點擊與仿製藥的幫助下,相關的選項卡時:

public void onTabSelected(Tab tab, FragmentTransaction ft) { 
    if (mFragment == null) { 
     mFragment = Fragment.instantiate(mActivity, mClass.getName(), mArgs); 
     ft.add(android.R.id.content, mFragment, mTag); 
    } else { 
     ft.attach(mFragment); 
    } 
} 

我的問題是我怎樣才能實現類似的方式,而瀏覽我的片段列表導航模式。我找不到類似的方法,因爲OnNavigationListener的ActionBar上的列表適用於整個列表而不是每個項目的基礎像tablistener。

或做我必須做這樣的事情:

@Override 
public boolean onNavigationItemSelected(int itemPosition, long itemId) { 
    switch (itemPosition) { 
    case 0: 
    //Replace the current fragment with FragmentA 
     break; 
    case 1: 
    //Replace the current fragment with FragmentB 
     break; 
    case 2: 
    //Replace the current fragment with FragmentC 
     break; 
    default: 
     break; 
    } 
    return true; 
} 

編輯:雖然導航模式如果我把設置爲NAVIGATION_MODE_TABS

我注意到一個有趣的現象我的手機在風景模式下它將標籤轉換爲列表並且保存聯繫之間的fragmen ts和列表項目(哪些是在之前的標籤項目)我怎樣才能達到這個結果點播而不是在方向變化

回答

1

我不認爲它是可能的,如果你在標籤模式下手動設置爲列表導航。當我的應用程序落在「大型」存儲區之下時,我已爲其中一個應用程序設置了列表導航。這是我如何使用導航聽衆:

OnNavigationListener mNavigationListener = new OnNavigationListener() 
{ 
int mLastPosition = -1; 

@Override 
public boolean onNavigationItemSelected(int itemPosition, long itemId) 
{ 
    String selectedTag = mFragmentNames.get(itemPosition); 

    FragmentManager fm = getSupportFragmentManager(); 
    Fragment fragment = fm.findFragmentByTag(selectedTag); 
    FragmentTransaction ft = fm.beginTransaction(); 

    /** Used to avoid the same fragment being reattached. */ 
    if(mLastPosition != itemPosition) 
    { 
    /** Means there was a previous fragment attached. */ 
    if(mLastPosition != -1) 
    { 
     Fragment lastFragment = fm.findFragmentByTag(mFragmentNames.get(mLastPosition)); 
     if(lastFragment != null) 
     ft.remove(lastFragment); 
    } 

    if(fragment == null) 
    { 
     /** The fragment is being added for the first time. */ 
     fragment = Fragment.instantiate(HomeActivity.this, selectedTag); 
     ft.add(R.id.rootLayout, fragment, selectedTag); 
     ft.commit(); 
    } else 
    { 
     ft.attach(fragment); 
     ft.commit(); 
    } 
    } 
    /** 
    * The newly attached fragment will be the last position if changed. 
    */ 
    mLastPosition = itemPosition; 

    return true; 
} 
}; 

變量mFragmentNames是映射一個整數位置片斷名稱的前一個HashMap。 「com.android.myproject.MyFragment」

我希望這有助於。