У меня есть Spinner с опцией MultiSelect.Я хочу, чтобы Listem Spinner для близкого события.Потому что мне нужно отправить запрос на сервер для этого события.
Я пытался слушать, когда спиннер теряет фокус, но это не помогло мне.Как я могу прослушать событие закрытия счетчика или потерять фокус спиннера?
Также я уже попробовал этот ответ: https://stackoverflow.com/a/18636385/10638252
Но у меня это не сработало.
Мой класс прядильщика:
class MultiSelectSpinner: Spinner, OnMultiChoiceClickListener{
private var _itemsUsers: Array<String>? = null
private var _itemsProjects:Array<String>? = null
private var _selectionUsers: BooleanArray? = null
private var _selectionProjects: BooleanArray? = null
private var _proxyAdapter: ArrayAdapter<String>
private var _title:String? = null
val usersListOfID = ArrayList<Int>()
private var usersList:List<Users>? = null
private var projectsPOJOList:List<ProjectsPOKO>? = null
val projectsListOfID = ArrayList<Int>()
/**
* Returns a list of strings, one for each selected item.
* @return
*/
val selectedUsers: List<String>
get() {
val selection = LinkedList<String>()
for (i in _itemsUsers!!.indices) {
if (_selectionUsers!![i]) {
selection.add(_itemsUsers!![i])
}
}
return selection
}
val selectedProjects: List<String>
get() {
val selection = LinkedList<String>()
for (i in _itemsProjects!!.indices) {
if (_selectionProjects!![i]) {
selection.add(_itemsProjects!![i])
}
}
return selection
}
/**
* Constructor for use when instantiating directly.
* @param context
*/
constructor(context: Context) : super(context) {
_proxyAdapter = ArrayAdapter(context, android.R.layout.simple_spinner_item)
super.setAdapter(_proxyAdapter)
}
/**
* Constructor used by the layout inflater.
* @param context
* @param attrs
*/
constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {
_proxyAdapter = ArrayAdapter(context, android.R.layout.simple_spinner_item)
super.setAdapter(_proxyAdapter)
}
/**
* {@inheritDoc}
*/
override fun onClick(dialog: DialogInterface, which: Int, isChecked: Boolean) { //some code}
/**
* {@inheritDoc}
*/
override fun performClick(): Boolean {
val builder = AlertDialog.Builder(context)
val builder2 = AlertDialog.Builder(context)
builder.setMultiChoiceItems(_itemsUsers, _selectionUsers, this)
builder2.setMultiChoiceItems(_itemsProjects, _selectionProjects, this)
if(_itemsUsers!=null){
builder.show()
}
if(_itemsProjects!=null){
builder2.show()
}
return super.performClick()
}
/**
* MultiSelectSpinner does not support setting an adapter. This will throw an exception.
* @param adapter
*/
override fun setAdapter(adapter: SpinnerAdapter) {
throw RuntimeException("setAdapter is not supported by MultiSelectSpinner.")
}
/**
* Sets the options for this spinner.
* @param items
*/
fun setUsers(items: List<String>) {
_itemsUsers = items.toTypedArray()
_selectionUsers = BooleanArray(_itemsUsers!!.size)
Arrays.fill(_selectionUsers, false)
}
fun setProjects(items: List<String>) {
_itemsProjects = items.toTypedArray()
_selectionProjects = BooleanArray(_itemsProjects!!.size)
Arrays.fill(_selectionProjects, false)
}