Запрос предложения - функция обратного вызова для повторного просмотра, когда редактирование текста теряет фокус при перемещении вверх или вниз - PullRequest
1 голос
/ 27 июня 2019

У меня есть активность с recycleView, которая включала некоторые редактируемые тексты. Когда я выбираю любую текстовую клавиатуру для редактирования, получаю всплывающее окно.Но когда я переместил вид с перезаписью на верхнюю клавиатуру, изменив ее на настройку по умолчанию.

Я нашел причину того, что , когда редактируемый текст исчезает, он удаляется из вида рециклирования, поэтому он теряет фокус.Затем клавиатура меняется на значение по умолчанию .

Теперь мне нужно закрыть клавиатуру, когда нет никакого фокуса для любого редактируемого текста при перемещении recycleview. Но я не знаю, как получить такой вызов, когда нет форкуса для редактируемых текстов.

1 Ответ

1 голос
/ 27 июня 2019

Я хочу предложить вам один метод recyclerView, который называется onViewDetachedFromWindow. Например, когда вы прокручиваете RecyclelerView, элемент становится невидимым, и в этот момент адаптер вызывает:

override fun onViewDetachedFromWindow(holder: RecyclerView.ViewHolder) {
        super.onViewAttachedToWindow(holder)
        if (holder is MyViewHolder) {
            holder.checkForFocus()
        }
}

После того, как в viewHolder вы можете проверить фокус:

inner class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

        fun bind(item: MyViewItem) {
            itemView.editText.hint = item.title
        }

        fun checkForFocus() {
            if(itemView.editText.hasFocus()){
                callback.hideKeyBoard()
            }
        }
    }
}

var callback: IKeyBoard? = null // initialize it in fragment/activity


interface IKeyBoard {
        fun hideKeyBoard()
}

После этого вы можете реализовать метод обратного вызова во фрагменте / активности, чтобы скрыть клавиатуру

Надеюсь, что помог тебе

...