Я использовал TextView и сделал его кликабельным в Kotlin. Это приложение для распознавания голоса, и как только я щелкаю текстовое представление, я хочу, чтобы оно ввело другое действие.
class STTFragment : Fragment() {
lateinit var recognizer: SpeechRecognizer
lateinit var chatPresenter: IChatPresenter
private val thisActivity = activity
override fun onAttach(context: Context?) {
super.onAttach(context)
chatPresenter = ChatPresenter(requireContext())
}
@NonNull
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val rootView = inflater.inflate(R.layout.fragment_sttframe, container, false)
if (thisActivity is ChatActivity)
thisActivity.fabsetting.hide()
promptSpeechInput()
setupCommands(rootView)
return rootView
}
private fun setupCommands(rootView: View) {
var voiceCommand = getResources().getStringArray(R.array.voiceCommands)
var voiceCommandsList = voiceCommand.toCollection(ArrayList())
rootView.clickableCommands.layoutManager = LinearLayoutManager(activity, LinearLayoutManager.HORIZONTAL, false)
rootView.clickableCommands.adapter = VoiceCommandsAdapter(voiceCommandsList, activity)
}
Это sttFragment класс
class VoiceCommandsAdapter(val items: ArrayList<String>, val context: Context?) : RecyclerView.Adapter<VoiceCommandsAdapter.ViewHolder>() {
lateinit var chatPresenter: IChatPresenter
override fun onCreateViewHolder(parent: ViewGroup, p1: Int): ViewHolder {
chatPresenter = ChatPresenter(context as Context)
return ViewHolder(LayoutInflater.from(context).inflate(R.layout.item_voice_commands, parent, false))
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder?.voiceCommand?.text = items.get(position)
}
override fun getItemCount(): Int {
return items.size
}
inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val voiceCommand: TextView = view.voiceCommand
init {
view.setOnClickListener {
val chatMessage = items[adapterPosition]
val splits = chatMessage.split("\n".toRegex()).dropLastWhile { it.isEmpty() }
val message = splits.joinToString(" ")
if (!chatMessage.isEmpty()) {
chatPresenter.sendMessage(message, items[adapterPosition])
}
}
}
}
}
Это класс voicecommandAdapter .
Как я могу изменить код так, чтобы, как только я щелкнул по команде, он перешел к другому занятию.
Не следует ждать до истечения времени ожидания распознавателя.