我正在开发具有TabLayout的简单应用程序。每个选项卡都有自己的可绘制图标。当标签处于活动状态时,其图标应为白色,否则颜色应为深色。现在,当我写这段代码时:
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
tab.getIcon().setColorFilter(ContextCompat.getColor(MainActivity.this, R.color.colorIcons), PorterDuff.Mode.SRC_IN);
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
tab.getIcon().setColorFilter(ContextCompat.getColor(MainActivity.this, R.color.colorDivider), PorterDuff.Mode.SRC_IN);
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
Android工作室给我一个关于NullPointerException的警告:
但是,当我将其提取为单独的方法时,一切都还可以,Android Studio不会抱怨:
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
setIconColor(tab.getIcon(), true);
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
setIconColor(tab.getIcon(), false);
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
这种新方法:
private void setIconColor(Drawable icon, boolean active){
if (active) {
icon.setColorFilter(ContextCompat.getColor(MainActivity.this, R.color.colorIcons), PorterDuff.Mode.SRC_IN);
} else {
icon.setColorFilter(ContextCompat.getColor(MainActivity.this, R.color.colorDivider), PorterDuff.Mode.SRC_IN);
}
}
感觉很奇怪,在将功能发送到单独的方法后,它不再抱怨方法调用可能会产生NullPointerException。我错过了什么,或者这是Android工作室的不良行为?