Android 微调器不适用于OnItemSelectedListener

Android 微调器不适用于OnItemSelectedListener,android,Android,我有一个包含textinput和spinner的表单,表单的内容取决于数据库,所以它是通过编程生成的 我的一些字段,无论是文本输入还是微调器,都是必需的。 因此,如果没有选择,一些微调器会被标记为红色,我现在正试图做的是,一旦用户选择了某个对象,就将其恢复为原始颜色 edittext字段没有问题,但是当用户更改微调器选择时,微调器不会触发onItemSelected事件 一个微调器的Xml,一个“项”,这些项随后被膨胀并放在gridview中: <?xml version="1.0" en

我有一个包含textinput和spinner的表单,表单的内容取决于数据库,所以它是通过编程生成的

我的一些字段,无论是文本输入还是微调器,都是必需的。 因此,如果没有选择,一些微调器会被标记为红色,我现在正试图做的是,一旦用户选择了某个对象,就将其恢复为原始颜色

edittext字段没有问题,但是当用户更改微调器选择时,微调器不会触发onItemSelected事件

一个微调器的Xml,一个“项”,这些项随后被膨胀并放在gridview中:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable
            name="item"
            type="com.test.mymy.ui.models.GrotGridviewItem" />
    </data>
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <TextView
            android:id="@+id/label"
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            android:text="@{item.label}"/>
        <Spinner
            android:id="@+id/spinner"
            android:layout_width="200dp"
            android:layout_height="50dp"
            android:entries="@{item.values}"
            android:selectedItemPosition="@={item.spinnerPosition}"/>
    </LinearLayout>
</layout>
GroGridviewAdapter的getView方法,其中的神奇之处在于:

@凌驾 公共视图getView(内部位置、视图视图、视图组父视图){

final GrotGridviewItem GrotGridviewItem=grotGridviewItems.get(位置);
int typeNumber=getItemViewType(位置);
LayoutFlater LayoutFlater=(LayoutFlater)getContext().getSystemService(
上下文。布局(充气机和服务);
视图数据绑定;
if(typeNumber==GrotGridViewItemTypeEnum.TEXT.getNumber()){
binding=GrotFieldTextBinding.flate(layoutInflater,parent,false);
最终GrotFieldTextBinding GrotFieldTextBinding=(GrotFieldTextBinding)绑定;
EditText EditText=grotFieldTextBinding.value;
//第一次加载页面时将其设置为红色或透明
if(null!=redAtStart.get(grotGridviewItem)&&redAtStart.get(grotGridviewItem)){
editText.setBackgroundColor(grotColor.RED.getIntValue());
champIsRed.put(grotGridviewItem.getChampEntity(),true);
}
addTextChangedListener(makeTextWatcher(grotFieldTextBinding,grotGridviewItem));
}else if(typeNumber==GrotGridViewItemTypeEnum.SPINNER.getNumber()){
绑定=GrotFieldSpinnerBinding.inflate(LayoutFlater,parent,false);
GrotFieldSpinnerBinding GrotFieldSpinnerBinding=(GrotFieldSpinnerBinding)绑定;
微调器微调器=grotFieldSpinnerBinding.Spinner;
Log.i(“#####,,“将侦听器添加到微调器”);
spinner.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图selectedItemView、整型位置、长id){
Log.i(“###微调器##””,String.valueOf(position));
if(spinner.getSelectedItemPosition()!=-1){
spinner.setBackgroundColor(GrotColorsEnum.TRANSPARENT.getIntValue());
}
}
@凌驾
未选择公共无效(AdapterView父视图){
Log.i(“########,,“无”);
}
});
//第一次加载页面时将其设置为红色或透明
if(spinner.getSelectedItemPosition()!=-1){
spinner.setBackgroundColor(GrotColorsEnum.TRANSPARENT.getIntValue());
champIsRed.put(grotGridviewItem.getChampEntity(),false);
}
if(null!=redAtStart.get(grotGridviewItem)&&redAtStart.get(grotGridviewItem)){
spinner.setBackgroundColor(GrotColorsEnum.RED.getIntValue());
champIsRed.put(grotGridviewItem.getChampEntity(),true);
}
}否则{
抛出新的IllegalArgumentException(“类型N°”+typeNumber+“不存在”);
}
if(null==视图){
view=binding.getRoot();
}
binding.setVariable(BR.item,grotGridviewItem);
返回视图;
}
我做错了什么? 你需要更多的代码吗

GroGridviewAdapter champsadapter = new GroGridviewAdapter(activity, grotFields, grotGenerator.getIsChampObligatoire());
GridView champsGridView = binding.formulaire;
champsGridView.setAdapter(champsadapter);
final GrotGridviewItem grotGridviewItem = grotGridviewItems.get(position);
int typeNumber = getItemViewType(position);

LayoutInflater layoutInflater = (LayoutInflater) getContext().getSystemService(
        Context.LAYOUT_INFLATER_SERVICE);

ViewDataBinding binding;
if (typeNumber == GrotGridViewItemTypeEnum.TEXT.getNumber()) {
    binding = GrotFieldTextBinding.inflate(layoutInflater, parent, false);
    final GrotFieldTextBinding grotFieldTextBinding = (GrotFieldTextBinding) binding;
    EditText editText = grotFieldTextBinding.value;

    //set it red or transparent when the page first load
    if (null != redAtStart.get(grotGridviewItem) && redAtStart.get(grotGridviewItem)) {
        editText.setBackgroundColor(GrotColorsEnum.RED.getIntValue());
        champIsRed.put(grotGridviewItem.getChampEntity(), true);
    }

    editText.addTextChangedListener(makeTextWatcher(grotFieldTextBinding, grotGridviewItem));

} else if (typeNumber == GrotGridViewItemTypeEnum.SPINNER.getNumber()) {
    binding = GrotFieldSpinnerBinding.inflate(layoutInflater, parent, false);
    GrotFieldSpinnerBinding grotFieldSpinnerBinding = (GrotFieldSpinnerBinding) binding;
    Spinner spinner = grotFieldSpinnerBinding.spinner;
    Log.i("####", "Adding listener to spinner");
    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
            Log.i("##spinner##", String.valueOf(position));
            if (spinner.getSelectedItemPosition() != -1) {
                spinner.setBackgroundColor(GrotColorsEnum.TRANSPARENT.getIntValue());
            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> parentView) {
            Log.i("##spinner##", "nothing");
        }

    });

    //set it red or transparent when the page first load
    if (spinner.getSelectedItemPosition() != -1) {
        spinner.setBackgroundColor(GrotColorsEnum.TRANSPARENT.getIntValue());
        champIsRed.put(grotGridviewItem.getChampEntity(), false);
    }
    if (null != redAtStart.get(grotGridviewItem) && redAtStart.get(grotGridviewItem)) {
        spinner.setBackgroundColor(GrotColorsEnum.RED.getIntValue());
        champIsRed.put(grotGridviewItem.getChampEntity(), true);
    }


} else {
    throw new IllegalArgumentException("type N°" + typeNumber + " does not exist");
}

if (null == view) {
    view = binding.getRoot();
}

binding.setVariable(BR.item, grotGridviewItem);
return view;
}