2012-09-25 20 views
0

我已經做過這樣的事情,這是一個超級簡單的例子,但我似乎無法使用actionbarsherlock v4.1使它工作。OnTabSelected在使用actionbarsherlock時根本沒有被調用

這是主要的活動

public class VanityActivity extends SherlockFragmentActivity { 



/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    if (savedInstanceState != null) { 
     //restore 
    } 

    com.actionbarsherlock.app.ActionBar actionBar = getSupportActionBar(); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    actionBar.setHomeButtonEnabled(false); 
    actionBar.setDisplayShowHomeEnabled(false); 
    com.actionbarsherlock.app.ActionBar.Tab tab1 = actionBar.newTab(); 
    tab1.setText("Website"); 
    tab1.setTabListener(new HeaderTabListener(getApplicationContext())); 
    tab1.setTag(1); 
    actionBar.addTab(tab1); 

    com.actionbarsherlock.app.ActionBar.Tab tab2 = actionBar.newTab(); 
    tab2.setText("Portfolio"); 
    tab2.setTabListener(new HeaderTabListener(getApplicationContext())); 
    tab2.setTag(2); 
    actionBar.addTab(tab2); 

    com.actionbarsherlock.app.ActionBar.Tab tab3 = actionBar.newTab(); 
    tab3.setText("Team"); 
    tab3.setTabListener(new HeaderTabListener(getApplicationContext())); 
    tab3.setTag(3); 
    actionBar.addTab(tab3); 

} 


} 

而且我HeaderTabListener類:

public class HeaderTabListener implements 

com.actionbarsherlock.app.ActionBar.TabListener { 

private Context context; 

public HeaderTabListener(Context context){ 
    this.context = context; 
} 

@Override 
public void onTabSelected(com.actionbarsherlock.app.ActionBar.Tab tab, android.support.v4.app.FragmentTransaction ft) { 
    int i=((Integer)tab.getTag()).intValue(); 
    if(tab.getPosition()==0){ 
     ft.replace(android.R.id.content, CompanyFragment.newInstance(i)); 
    }else if(tab.getPosition()==1){ 

     ft.replace(android.R.id.content, PortfolioFragment.newInstance(i)); 
    } 
} 

@Override 
public void onTabUnselected(com.actionbarsherlock.app.ActionBar.Tab tab, android.support.v4.app.FragmentTransaction ft) { 
    Log.v("Tab selected", tab.getText().toString()); 

} 

@Override 
public void onTabReselected(com.actionbarsherlock.app.ActionBar.Tab tab, android.support.v4.app.FragmentTransaction ft) { 
    Log.v("Tab selected2", tab.getText().toString()); 
} 

} 

最後一個片段(兩個片段是相同的,但在每個佈局文字是不同的)

public class PortfolioFragment extends SherlockFragment { 
    private static final String KEY_POSITION="position"; 
    private static final String KEY_TEXT="text"; 

    static PortfolioFragment newInstance(int position) { 
    PortfolioFragment frag=new PortfolioFragment(); 
    Bundle args=new Bundle(); 

    args.putInt(KEY_POSITION, position); 

    frag.setArguments(args); 

    return(frag); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, 
          ViewGroup container, 
          Bundle savedInstanceState) { 
    View result=inflater.inflate(R.layout.fragment_portfolio, container, false); 

    int position=getArguments().getInt(KEY_POSITION, -1); 
    return(result); 
    } 
} 

所以當第一次加載標籤都顯示正確,他突出顯示的第一個和CompanyFragment佈局中的文本顯示。但是,然後我無法點擊任何其他選項卡來更改內容,並且我的onTabSelected內部日誌永遠不會被調用。有什麼想法嗎?謝謝閱讀。

+0

我有同樣的問題。你是否設法解決它? – nia

+0

我做了,但看着工作代碼和我上面有什麼我找不到我改變了。我記得它非常小...如果你想發佈你的代碼,我可以嘗試幫忙。 – pat

+0

請看看提供的答案,並接受它,如果它解決了你的問題! – Eric

回答

0

首先,讓我告訴你,我沒有使用ActionBarSherlock的經驗。我查看了你的代碼,爲我的應用程序獲取了一些想法。看到你幾個月前發佈之後還沒有回答,我想分享我的第一印象。

據我所知,ActionBarSherlock公開了與最新的Android API相同的功能。因此,我認爲你錯過了一個簡單的方法調用。在替換片段後,您需要撥打commit()Android Developer Guide reference)。因此,改變線條和所有類似的線條;

ft.replace(android.R.id.content, PortfolioFragment.newInstance(i));ft.replace(android.R.id.content, PortfolioFragment.newInstance(i)).commit();

我希望這可以解決您的問題,但我確實意識到您聲明不會調用²nTabSelected()方法。然而,如果不調試問題之間的差異,看起來就很透明。

相關問題