How to handle pressed enter with Litho.Edittext

388 Views Asked by At

in my current android project I have to use Litho framework. Problem what I facing now is how to handle enter key with Litho EditText widget.(Invoke request when enter key on soft keyboard is pressed) I tried setOnKeyListener on LithoView which contains EditText but without any effect. So if someone use Litho with EditText and can helps I'll happy.

1

There are 1 best solutions below

0
On

It fires a click event, unfortunately that also comes for regular clicks.

import android.graphics.Color
import android.text.InputType
import android.util.Log
import com.facebook.litho.*
import com.facebook.litho.annotations.*
import com.facebook.litho.widget.EditText
import com.facebook.litho.widget.Recycler
import com.facebook.litho.widget.RecyclerBinder
import com.facebook.litho.widget.TextChangedEvent
import com.facebook.yoga.YogaEdge

interface OnExecuteListener {
  fun onExecute(query: String)
}

@LayoutSpec
class MainComponentSpec {
  companion object {
    @JvmStatic
    @OnCreateInitialState
    fun createInitialState(c: ComponentContext, url: StateValue<String>, @Prop initialUrl: String) {
      url.set(initialUrl)
    }

    @JvmStatic
    @OnCreateLayout
    fun onCreateLayout(
        c: ComponentContext, @State url: String, @Prop recyclerBinder: RecyclerBinder): ComponentLayout {
      return Column.create(c)
          .paddingDip(YogaEdge.ALL, 16f)
          .backgroundColor(Color.WHITE)
          .child(urlText(c, url))
          .child(getRecyclerComponent(c, recyclerBinder))
          .build()
    }

    @JvmStatic
    @OnEvent(TextChangedEvent::class)
    fun onTextChanged(c: ComponentContext, @State url: String) {
      Log.i("X", "tc: " + url)
    }

    @JvmStatic
    @OnEvent(ClickEvent::class)
    fun onClick(c: ComponentContext, @State url: String, @Prop executeListener: OnExecuteListener) {
      executeListener.onExecute(url)
    }

    private fun urlText(c: ComponentContext, url: String): EditText.Builder? {
      return EditText.create(c)
          .text(url)
          .textSizeSp(14f)
          .isSingleLine(true)
          .inputType(InputType.TYPE_TEXT_VARIATION_URI)
          .clickHandler(MainComponent.onClick(c))
          .textChangedEventHandler(MainComponent.onTextChanged(c))
    }

    private fun getRecyclerComponent(c: ComponentContext,
        recyclerBinder: RecyclerBinder): Component<Recycler> {
      return Recycler.create(c).binder(recyclerBinder).build()
    }
  }
}