Android spinner在旋转屏幕后变为空

Android spinner在旋转屏幕后变为空,android,null,android-spinner,Android,Null,Android Spinner,我使用微调器将值显示为下拉列表,我使用下面的代码更改微调器文本值 <Spinner android:id="@+id/showUnit" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:entries

我使用微调器将值显示为下拉列表,我使用下面的代码更改微调器文本值

<Spinner
        android:id="@+id/showUnit"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:entries="@array/unitName"
        android:background="@drawable/gradient_spinner_map_miles_button" />

    showUnit.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
                // TODO Auto-generated method stub
                String item = arg0.getItemAtPosition(arg2).toString();
                if (arg1 != null && arg1 instanceof TextView) {
                     ((TextView)arg1).setTextColor(Color.WHITE);
                    ((TextView) arg1).setTextSize(13);
                    ((TextView) arg1).setGravity(Gravity.CENTER);
                 }
但是当我尝试旋转屏幕时,
((TextView)arg0.getChildAt(0))
返回null

我知道,当我在landsacpe或纵向模式下旋转屏幕时,活动周期是重新启动的,那么为什么微调器会变为空

请给我适当的解决办法


谢谢

当您在
视图arg1
中有适当的视图时,为什么要使用
getChildAt

public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) 
{           
     if (arg1 != null && arg1 instanceof TextView) {
         ((TextView)arg1).setTextColor(Color.WHITE);
     }
}
微调器来源:


这并不能解释为什么你的值在
onItemSelected
中为空,但如果没有完整的代码,我看不出有什么问题。

我也有同样的问题,所以我在getView上移动了setTextColor:

ArrayAdapter<CharSequence> adapter =
    new ArrayAdapter<CharSequence>(this, android.R.layout.simple_spinner_item, getResources().getTextArray(R.array.myarray)){
        @Override
        public View getDropDownView(int position, View convertView, ViewGroup parent){
            View v = null;
            System.out.println("getDropDownView");
            v = super.getDropDownView(position, null, parent);
            // If this is the selected item position
            if (position == PosItemSelected) {
                v.setBackgroundColor(getResources().getColor(R.color.orange_energicod));
            }
            else {
                // for other views
                v.setBackgroundColor(Color.WHITE);
            }
            return v;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View v = super.getView(position, convertView, parent);                     
            ((TextView) v).setTextColor(getResources().getColor(R.color.white));
            return v;
        }
    };

// Specify the layout to use when the list of choices appears
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// Apply the adapter to the spinner
spinner.setAdapter(adapter); // set the adapter to provide layout of rows and content
spinner.setOnItemSelectedListener(this); // set the listener, to perform actions based on item selection
ArrayAdapter适配器=
新的ArrayAdapter(这个,android.R.layout.simple_微调器_项,getResources().getTextArray(R.array.myarray)){
@凌驾
公共视图getDropDownView(int位置、视图转换视图、视图组父视图){
视图v=null;
System.out.println(“getDropDownView”);
v=super.getDropDownView(位置,空,父级);
//如果这是选定的项目位置
如果(位置==所选位置){
v、 setBackgroundColor(getResources().getColor(R.color.orange_));
}
否则{
//其他意见
v、 setBackgroundColor(颜色:白色);
}
返回v;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图v=super.getView(位置、转换视图、父级);
((TextView)v.setTextColor(getResources().getColor(R.color.white));
返回v;
}
};
//指定显示选项列表时要使用的布局
setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
//将适配器应用于微调器
微调器.设置适配器(适配器);//设置适配器以提供行和内容的布局
spinner.setOnItemSelectedListener(此);//设置侦听器,以根据项目选择执行操作
现在:

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
    // An item was selected. You can retrieve the selected item using parent.getItemAtPosition(pos)        
}
@覆盖
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
//已选择一个项目。您可以使用parent.getItemAtPosition(pos)检索所选项目
}

希望对您也有用。

是返回
null
getChildAt()
还是
微调器本身是
null
?仅arg0.getChildAt(0)在旋转屏幕时获取null这里有一个类似的问题帮助了我:但在旋转屏幕时获取arg1为null时也会遇到同样的问题我刚刚用XML声明了一个微调器并在活动中初始化,我的要求是在微调器视图中更改选择微调器文本颜色,我们可以使用上面的代码或((TextView)arg0.getChildAt(0)).setTextColor(color.WHITE))来更改微调器文本颜色,当我进入屏幕时,它工作正常,但当我旋转屏幕时((TextView)arg0.getChildAt(0)为null表示arg0.getChildCount()我已经编辑了我的问题,请看上面,我不仅改变了颜色,还改变了大小,重力等。不能使用你上面的代码。谢谢你的支持。请展示整个活动,看看你如何处理你的旋转。
    android:dropDownSelector="@drawable/spinner_state"
ArrayAdapter<CharSequence> adapter =
    new ArrayAdapter<CharSequence>(this, android.R.layout.simple_spinner_item, getResources().getTextArray(R.array.myarray)){
        @Override
        public View getDropDownView(int position, View convertView, ViewGroup parent){
            View v = null;
            System.out.println("getDropDownView");
            v = super.getDropDownView(position, null, parent);
            // If this is the selected item position
            if (position == PosItemSelected) {
                v.setBackgroundColor(getResources().getColor(R.color.orange_energicod));
            }
            else {
                // for other views
                v.setBackgroundColor(Color.WHITE);
            }
            return v;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View v = super.getView(position, convertView, parent);                     
            ((TextView) v).setTextColor(getResources().getColor(R.color.white));
            return v;
        }
    };

// Specify the layout to use when the list of choices appears
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// Apply the adapter to the spinner
spinner.setAdapter(adapter); // set the adapter to provide layout of rows and content
spinner.setOnItemSelectedListener(this); // set the listener, to perform actions based on item selection
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
    // An item was selected. You can retrieve the selected item using parent.getItemAtPosition(pos)        
}