5

我試圖通過創建使用操作欄和選項卡的簡單文本編輯應用程序來使用Android蜂窩。雖然我遇到了一個惱人的問題。選項卡創建並添加到操作欄後,我想更改選項卡上顯示的文本。我認爲使用下面的方法,ActionBar.Tab.setText(CharSequence arg0)會做的,但是,它似乎並沒有改變可視文本。還有一點是,如果我要調用getText(),它會返回我更改選項卡的文本。下面是我用來更改標籤文本的代碼片段:更改創建後的蜂巢操作欄選項卡中的選項卡文本

int currentTabIndex = ab.getSelectedNavigationIndex(); 
currentTabTitle = (String) ab.getTabAt(currentTabIndex).getText(); // just to check 
ab.getTabAt(currentTabIndex).setText(fileName);      // change tab text 
currentTabTitle = (String) ab.getTabAt(currentTabIndex).getText(); // just to check 

我真的很茫然,到處都是搜索。我非常感謝任何人的建議。謝謝你的時間。

+0

互聯網搜索,請投此問題: http://code.google.com/p/android/問題/詳細信息?id = 17129&q = actionbar&colspec = ID%20Type%20Status%20Owner%20Summary%20Stars – xandy 2011-10-05 04:46:06

回答

0

嘗試刪除標籤並在更改文字後在所需索引處重新添加標籤。 (這是一個錯誤,當你添加後設置文本時,相關的視圖不會更新。)

+0

謝謝您的信息!我會稍微嘗試一下。希望他們很快會在更新中解決這個問題。 – Deeek 2011-04-29 20:08:37

+2

「很快」是相對的,但是,我會解決它。 ;) – adamp 2011-04-30 01:54:11

10

這是一個愚蠢的問題,添加和刪除標籤是一個壞主意,因爲如果你使用的是片段,你會最終刪除並重新添加您的片段與其選項卡。使用自定義視圖看起來效果更好,並且額外的獎勵爲您提供更大的自定義。

下面是如何使標籤與外觀和行爲等同於默認的自定義視圖:

ActionBar bar = getActionBar(); 

TabListener tabListener = new TabListener() { 

    @Override 
    public void onTabReselected(Tab tab, FragmentTransaction ft) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
     // TODO Auto-generated method stub 

    } 
}; 

Tab tab1 = bar.newTab() 
      .setText("Info") 
      .setTabListener(tabListener) 
      .setCustomView(makeTabDummy("Info", android.R.drawable.ic_menu_info_details)); 

bar.addTab(tab1); 

,這裏是像素完美的虛擬視圖:

private TextView makeTabDummy(String text, int icon) { 

    TextView tv = new TextView(this); 
    tv.setText(text); 
    tv.setTextColor(0xffffffff); 
    tv.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18); 
    tv.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT)); 
    tv.setCompoundDrawablesWithIntrinsicBounds(icon, 0, 0, 0); 
    tv.setGravity(Gravity.CENTER); 

    return tv; 
} 

從這裏我們可以更改標籤上的圖標和文本,而不會有任何問題。例如:

TextView tv = (TextView) tab1.getCustomView();   
tv.setText("change the text!"); 
tv.setCompoundDrawablesWithIntrinsicBounds(android.R.drawable.btn_star_big_on, 0, 0, 0); 

......和一切正常,因爲它應該

+2

這是一個非常好的答案!它應該被接受 – Erdal 2011-12-23 04:34:51

+0

這是固定在ICS中,你可以只使用標籤的正常方式... – ckozl 2012-07-11 13:13:34

+0

我在兼容包(Api 18)方向更改後看到此問題,所以將使用此解決方案。 – Divers 2013-10-14 10:27:41

相關問題