TabLayoutを持つ単純なアプリケーションを開発しています。各タブには、独自のアイコン描画機能があります。タブがアクティブな場合、そのアイコンは白色でなければなりません。そうでない場合は、暗い色になります。私はこのコードを書くとき今:Android "setColorFilterがNullPointerExceptionを生成する"注意が消えて
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スタジオの悪い行動ですか?