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;
|
}
|
}
|
}
|
}
|
}
|