我正在尝试在TabHost中创建选项卡的自定义颜色。
我已实现OnTabChangeListener
并且MainActivity正确加载。但是当我点击一个新标签时,我得到一个空指针。我的错误在哪里?我无法理解问题所在。
以下是基于this example
的松散代码@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)
答案 0 :(得分:1)
你应该使用StackOverflow示例:How do I change the background of an Android tab widget?: - )
@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();
即可。