0

TabHost でタブのカスタム カラーを作成しようとしています。

実装OnTabChangeListenerしましたが、MainActivity が正しく読み込まれます。ただし、新しいタブをクリックすると、null ポインターが表示されます。エラーはどこにありますか? 何が問題なのか理解できません。

これは、この例に大まかに基づいた問題のあるコードです

@Override  
public void onTabChanged(String tabId) {  
     for(int i=0;i<tabHost.getTabWidget().getChildCount();i++)
     {  
        tabHost.getTabWidget().getChildAt(i).setBackgroundDrawable(getResources().getDrawable(R.drawable.greygradient));  
     }
     tabHost.getTabWidget().getChildAt((tabHost.getCurrentTab())).setBackgroundDrawable(getResources().getDrawable(R.drawable.bluegradient));
}  

トレースは次のとおりです。

06-20 14:27:42.770: E/AndroidRuntime(1490): java.lang.NullPointerException
06-20 14:27:42.770: E/AndroidRuntime(1490):     at com.company.app.MainActivity.onTabChanged(MainActivity.java:72)
06-20 14:27:42.770: E/AndroidRuntime(1490):     at android.widget.TabHost.invokeOnTabChangeListener(TabHost.java:359)
06-20 14:27:42.770: E/AndroidRuntime(1490):     at android.widget.TabHost.setCurrentTab(TabHost.java:344)
06-20 14:27:42.770: E/AndroidRuntime(1490):     at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:132)
06-20 14:27:42.770: E/AndroidRuntime(1490):     at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:456)
06-20 14:27:42.770: E/AndroidRuntime(1490):     at android.view.View.performClick(View.java:2485)
06-20 14:27:42.770: E/AndroidRuntime(1490):     at android.view.View$PerformClick.run(View.java:9080)
4

1 に答える 1

1

StackOverflowの例を使用する必要があります:Androidタブウィジェットの背景を変更するにはどうすればよいですか?:-)

@Override  
public void onTabChanged(String tabId) {
    setTabColor(getTabHost());
}

private void setTabColor(TabHost tabhost) {
    for(int i=0;i<tabhost.getTabWidget().getChildCount();i++)
    {
        tabhost.getTabWidget().getChildAt(i).setBackgroundColor(Color.parseColor("#FF0000")); //unselected
    }
    tabhost.getTabWidget().getChildAt(tabhost.getCurrentTab()).setBackgroundColor(Color.parseColor("#0000FF")); // selected
}

NullPointerの最も可能性の高い理由はTabHostです。これがインスタンス化されていることを確認してください。これは、onCreate内で行うと想定しています。

TabActivityを拡張している場合はgetTabHost();、アクティビティコンテキストから呼び出すことができます。

于 2012-06-20T18:40:31.797 に答える