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