Android 更改微调器文本颜色时的空指针
我有一个包含4个选项卡的活动。 在某些选项卡中,我有一个微调器,可以通过以下代码更改文本颜色:Android 更改微调器文本颜色时的空指针,android,nullpointerexception,android-spinner,Android,Nullpointerexception,Android Spinner,我有一个包含4个选项卡的活动。 在某些选项卡中,我有一个微调器,可以通过以下代码更改文本颜色: mySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position,
mySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
//((TextView)parentView.getChildAt(0)).setTextColor(Color.rgb(249, 249, 249));
((TextView) parentView.getChildAt(0)).setTextColor(Color.BLACK);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
//DO NOTHING
}
});
我不知道为什么
我已经尝试过使用布尔变量,比如
if(!alreadyChangedColor)
((TextView) parentView.getChildAt(0)).setTextColor(Color.BLACK);
但它只在我第一次显示微调器时更改颜色,在我更改选项卡后,文本将返回到其原始颜色
编辑
我使用的是默认微调器,唯一需要更改的是蓝线
XML中的微调器:
<Spinner
android:id="@+id/paymentMethodValue"
android:layout_width="280dp"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/paymentMethodText"
android:layout_alignLeft="@+id/ibanValue"
android:layout_alignStart="@+id/ibanValue"
android:layout_toRightOf="@+id/paymentMethodText"
android:entries="@array/arrayPaymentMethods"
android:focusable="false"
android:textSize="12pt" />
编辑/2
我想我找到了一个解决办法:
在我第一次创建活动时,使用变量保留selectedView,然后在onItemSelectedListener中使用该变量
下面是一些代码:
private View _selectedItemView;
mySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
if (selectedItemView != null){
_selectedItemView = selectedItemView;
((TextView) selectedItemView).setTextColor(Color.BLACK);
} else {
((TextView) _selectedItemView).setTextColor(Color.BLACK);
}
}
希望它能帮助别人而不是我 selectedItemView.setTextColorColor.BLACK不存在。TextViewselectedItemView.setTextColorColor.BLACK;在进行颜色更改之前,是否尝试检查getChildAt0是否为null?我已经有一段时间没有这样做了,但我想我也遇到了类似的问题,在列出任何项之前,onItemSelected被调用。@JaredRummler:我第一次调用onItemSelectedListener parentView.getChildAt0时,与selectedView相同,它有一些值,但当我第二次调用它时,它给我一个空引用。调试并查看,是什么原因造成的。
private TextView _selectedItemView;
mySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
_selectedItemView= (TextView) parent.getItemAtPosition(pos);
_selectedItemView.setTextColor(Color.BLACK);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
Spinner mySpinner = (Spinner) container.findViewById(R.id.mySpinnerValue);
ArrayAdapter mySpinnerAdapter = (ArrayAdapter) mySpinner.getAdapter();
private View _selectedItemView;
mySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
if (selectedItemView != null){
_selectedItemView = selectedItemView;
((TextView) selectedItemView).setTextColor(Color.BLACK);
} else {
((TextView) _selectedItemView).setTextColor(Color.BLACK);
}
}
private TextView _selectedItemView;
mySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
_selectedItemView= (TextView) parent.getItemAtPosition(pos);
_selectedItemView.setTextColor(Color.BLACK);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});