package com.doumee.lib_coremodel.binding.viewadapter.spinner; 
 | 
  
 | 
  
 | 
import android.text.TextUtils; 
 | 
import android.view.View; 
 | 
import android.widget.AdapterView; 
 | 
import android.widget.ArrayAdapter; 
 | 
import android.widget.Spinner; 
 | 
import androidx.databinding.BindingAdapter; 
 | 
import com.doumee.lib_coremodel.binding.command.BindingCommand; 
 | 
import java.util.ArrayList; 
 | 
import java.util.List; 
 | 
  
 | 
  
 | 
/** 
 | 
 * Created by goldze on 2017/6/18. 
 | 
 */ 
 | 
public class ViewAdapter { 
 | 
    /** 
 | 
     * 双向的SpinnerViewAdapter, 可以监听选中的条目,也可以回显选中的值 
 | 
     * 
 | 
     * @param spinner        控件本身 
 | 
     * @param itemDatas      下拉条目的集合 
 | 
     * @param valueReply     回显的value 
 | 
     * @param bindingCommand 条目点击的监听 
 | 
     */ 
 | 
    @BindingAdapter(value = {"itemDatas", "valueReply", "resource", "dropDownResource", "onItemSelectedCommand"}, requireAll = false) 
 | 
    public static void onItemSelectedCommand(final Spinner spinner, final List<IKeyAndValue> itemDatas, String valueReply, int resource, int dropDownResource, final BindingCommand<IKeyAndValue> bindingCommand) { 
 | 
        if (itemDatas == null) { 
 | 
            throw new NullPointerException("this itemDatas parameter is null"); 
 | 
        } 
 | 
        List<String> lists = new ArrayList<>(); 
 | 
        for (IKeyAndValue iKeyAndValue : itemDatas) { 
 | 
            lists.add(iKeyAndValue.getKey()); 
 | 
        } 
 | 
        if (resource == 0) { 
 | 
            resource = android.R.layout.simple_spinner_item; 
 | 
        } 
 | 
        if (dropDownResource == 0) { 
 | 
            dropDownResource = android.R.layout.simple_spinner_dropdown_item; 
 | 
        } 
 | 
        ArrayAdapter<String> adapter = new ArrayAdapter(spinner.getContext(), resource, lists); 
 | 
        adapter.setDropDownViewResource(dropDownResource); 
 | 
        spinner.setAdapter(adapter); 
 | 
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
 | 
            @Override 
 | 
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
 | 
                IKeyAndValue iKeyAndValue = itemDatas.get(position); 
 | 
                //将IKeyAndValue对象交给ViewModel 
 | 
                bindingCommand.execute(iKeyAndValue); 
 | 
            } 
 | 
  
 | 
            @Override 
 | 
            public void onNothingSelected(AdapterView<?> parent) { 
 | 
  
 | 
            } 
 | 
        }); 
 | 
        //回显选中的值 
 | 
        if (!TextUtils.isEmpty(valueReply)) { 
 | 
            for (int i = 0; i < itemDatas.size(); i++) { 
 | 
                IKeyAndValue iKeyAndValue = itemDatas.get(i); 
 | 
                if (valueReply.equals(iKeyAndValue.getValue())) { 
 | 
                    spinner.setSelection(i); 
 | 
                    return; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
} 
 |