Прослушайте закрытое событие MultiSelectSpinner - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть 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)
}
...