NullPointer改变Spinner文本的颜色

时间:2014-09-09 08:14:41

标签: android nullpointerexception android-spinner

我有一个包含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);
        }
    }

希望它能帮助别人而不是我!

1 个答案:

答案 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) {

                }
            });