我有一个包含4个标签的活动。
在某些标签中,我有一个Spinner
,我可以通过以下代码更改文字颜色:
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
}
});
第一次显示Spinner时,一切都按预期进行:文本改变颜色并变为黑色。然后我继续多次更改选项卡,经过2或3次更改后,我得到NullPointerException
((TextView) parentView.getChildAt(0)).setTextColor(Color.BLACK);
我无法弄明白为什么。
我已经尝试过使用像
这样的布尔变量if(!alreadyChangedColor)
((TextView) parentView.getChildAt(0)).setTextColor(Color.BLACK);
但它仅在我第一次显示Spinner时更改颜色,在我更改标签后,文本将恢复为原始颜色。
修改
我正在使用默认微调器(我唯一改变的是蓝线)。
XML中的Spinner:
<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" />
这是我使用的条目:
<string-array name="arrayPaymentMethods">
<item>Ri. Ba. 30gg</item>
<item>Ri. Ba. 60gg</item>
<item>Ri. Ba. 90gg</item>
<item>Bonifico Bancario</item>
</string-array>
这是我在微调器上使用的适配器:
Spinner mySpinner = (Spinner) container.findViewById(R.id.mySpinnerValue);
ArrayAdapter mySpinnerAdapter = (ArrayAdapter) mySpinner.getAdapter();
修改/ 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);
}
}
希望它能帮助别人而不是我!
答案 0 :(得分:0)
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) {
}
});