Проблемы TextView customSelectionActionModeCallback во вложенном RecyclerView NestScrollView

У меня NestedScrollView есть RecyclerView, у каждого адаптера есть

  1. TextView один
  2. ImageView
  3. TextView два

и я хочу, чтобы пользовательское действие TextView select использовало kt ext

fun TextView.customMenuCallBack() {
    var selectAll = false
    customSelectionActionModeCallback = object : ActionMode.Callback {
        override fun onCreateActionMode(mode: ActionMode?, menu: Menu?): Boolean {
            return true
        }

        override fun onPrepareActionMode(mode: ActionMode?, menu: Menu?): Boolean {
            return true
        }

        override fun onActionItemClicked(mode: ActionMode?, item: MenuItem?): Boolean {
            item?.let {
                return when (it.itemId) {
                    android.R.id.selectAll -> {
                        selectAll = true
                        false
                    }

                    android.R.id.copy -> {
                        if (selectAll) {
                            //TODO set content
                            try {
                                val clipboard: ClipboardManager = context.getSystemService(AppCompatActivity.CLIPBOARD_SERVICE) as ClipboardManager
                                val clip = ClipData.newPlainText(context.toString(), content)
                                clipboard.setPrimaryClip(clip)
                            } catch (e: Exception) {
                                e.printStackTrace()
                            }
                        }
                      
                        //make custom action work return true
                        true
                    }
                    else -> {
                        false
                    }
                }
            }
            return false
        }

        override fun onDestroyActionMode(mode: ActionMode?) {

        }

    }
}

У меня появляются некоторые проблемы:

  1. меню не скрывается после клика по пункту меню

  2. Влияет на прокрутку, при прокрутке вперед она внезапно возвращается к ближайшей выделенной текстовой позиции

  3. Не работает в MIUI ROM

0
0
186
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я исправил часть проблем

  1. меню не скрывается после клика по пункту меню

  2. Влияет на прокрутку, при прокрутке вперед она внезапно возвращается к ближайшей выделенной текстовой позиции

fun TextView.customMenuCallBack() {
    var selectAll = false
    customSelectionActionModeCallback = object : ActionMode.Callback {
        override fun onCreateActionMode(mode: ActionMode?, menu: Menu?): Boolean {
            return true
        }

        override fun onPrepareActionMode(mode: ActionMode?, menu: Menu?): Boolean {
            return true
        }

        override fun onActionItemClicked(mode: ActionMode?, item: MenuItem?): Boolean {
            item?.let {
                return when (it.itemId) {
                    android.R.id.selectAll -> {
                        selectAll = true
                        false
                    }

                    android.R.id.copy -> {
                        if (selectAll) {
                            //TODO set content
                            try {
                                val clipboard: ClipboardManager = context.getSystemService(AppCompatActivity.CLIPBOARD_SERVICE) as ClipboardManager
                                val clip = ClipData.newPlainText(context.toString(), content)
                                clipboard.setPrimaryClip(clip)
                            } catch (e: Exception) {
                                e.printStackTrace()
                            }
                        }
                        //fixed first issue
                        mode?.finish()
                        //fixed second issue
                        clearFocus()
                        //make custom action work return true
                        true
                    }
                    else -> {
                        false
                    }
                }
            }
            return false
        }

        override fun onDestroyActionMode(mode: ActionMode?) {

        }

    }
}

обновление: Настройте мой NestedScrollView2: NestedScrollView и переопределите

  override fun requestChildFocus(child: View?, focused: View?) {
     //do nothing prevent focused issued
  }

Другие вопросы по теме