2017-09-15 66 views
0

我有4個選項卡,其中之一是通知圖標。默認情況下使用標籤規格設置所有圖標。如何更新tabhost android中的特定標籤圖標?

spec = host.newTabSpec("Tab Four"); 
         spec.setContent(R.id.tab5); 
         spec.setContent(new Intent(getApplicationContext(), ICNotificationActivity.class)); 
          spec.setIndicator("", getResources().getDrawable(R.drawable.tab_notification_noted)); 
host.addTab(spec); 

經過一段時間後,我必須更新標籤4圖標與另一個資源文件。如何更新tabhost?有沒有更新功能可用,如host.addTab(spec)

回答

1

在這裏,我循環所有選項卡,並更改選定選項卡的顏色和圖標。 在循環我設置所有選項卡未選中首先比只有選定的選項卡設置爲更新的圖標和顏色。

private void setTabColor(TabHost tabhost, int position) { 
    for (int i = 0; i < tabhost.getTabWidget().getChildCount(); i++) { 
     //  unselected 
     tabhost.getTabWidget().getChildAt(i) 
       .setBackgroundResource(R.drawable.tab_unselected); 

     TextView tv = (TextView) tabHost.getTabWidget().getChildAt(i).findViewById(R.id.tvTabTitle); 
     tv.setTextColor(getResources().getColor(R.color.text_white)); 
    } 
    if (position > 0) { 
     //  selected 
     tabhost.getTabWidget().setCurrentTab(position); 
     tabhost.getTabWidget().getChildAt(tabhost.getCurrentTab()) 
       .setBackgroundResource(R.drawable.tab_selected); 
     TextView tv = (TextView) tabHost.getTabWidget().getChildAt(tabhost.getCurrentTab()).findViewById(R.id.tvTabTitle); 
     tv.setTextColor(getResources().getColor(R.color.tab_color)); 
    } 

} 

可以通過使用

new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     //Do something here 
    setTabColor(myTabHost, myTabPosition); 
    } 
}, 5000); 
+0

顯示java.lang.NullPointerException調用上述方法:嘗試調用虛擬方法 '無效android.view.View.setBackgroundResource(INT)' 上的空對象引用。顯示此日誌錯誤。 {host =(TabHost)findViewById(R.id.tabHost); host.setup(); host.getTabWidget()。setStripEnabled(false); host.getTabWidget()。setDividerDrawable(R.drawable.border_tab_activity); host.setup(this.getLocalActivityManager());},已經定義了tabhost。 –

+0

@SARATHV我已經給你我的代碼,你需要根據你的需要來改變。 –

+1

代碼正常工作,謝謝。我在表格中犯了錯誤,這就是爲什麼我得到了空指針異常 –