¿Por qué la configuration de OnClickListener funciona una vez?

Quiero migrar una estructura de proyecto muy sólida que uso para Kotlin. Primero probé lo básico: actividades y transactions de fragments. Parece tan fácil y simple:

class MainActivity : AppCompatActivity(), SomeInterface { override fun onCreate(savedInstanceState: Bundle?) { setContentView(R.layout.activity_main) val mainFragment = supportFragmentManager.findFragmentById(R.id.fragment_main) as MainActionsFragment? ?: MainActionsFragment.newInstance() supportFragmentManager.inTransaction { add(R.id.container_main, mainFragment) } } private val anotherFragment by lazy { supportFragmentManager.findFragmentById(R.id.another_fragment) as AnotherFragment? ?: AnotherFragment.newInstance() } override fun myInterfaceMethod() { replaceFragment(anotherFragment, R.id.container_main) } } class MainActionsFragment : Fragment() { val btnSale: Button by bindView(R.id.btn_sale) val btnVisit: Button by bindView(R.id.btn_visit) override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater!!.inflate(R.layout.fragment_main, container, false) } override fun onResume() { super.onResume() btnSale.setOnClickListener{ _ -> listener.requestAction(SaleType.SALE) } btnVisit.setOnClickListener{ _ -> listener.requestAction(SaleType.VISIT) } } } 

Extensions.kt

 fun AppCompatActivity.replaceFragment(fragment: Fragment, @IdRes frameId: Int) { supportFragmentManager.inTransaction { replace(frameId, fragment) .addToBackStack(fragment.tag) } } inline fun FragmentManager.inTransaction(func: FragmentTransaction.() -> FragmentTransaction) { beginTransaction() .func() .commit() } 

Ahora, MainActionsFragment tiene dos botones. Todo funciona como se esperaba, el primer clic en cualquiera de ellos me lleva al fragment deseado. Sin embargo, una vez que presiono el button Atrás y veo mis dos botones nuevamente, su oyente de clic se ha ido. Esta es más o less la forma estándar de hacer las cosas traducidas a Kotlin, nada extravagante además de sus nuevas características. Intenté mover la configuration de onClickListeners a onCreateView() pero se bloquea:

Causado por: kotlin.KotlinNullPointerException en kotterknife.ButterKnifeKt $ viewFinder $ 7.invoke (ButterKnife.kt: 95) en kotterknife.ButterKnifeKt $ viewFinder $ 7.invoke (ButterKnife.kt) en kotterknife.ButterKnifeKt $ requiere $ 1.invoke (ButterKnife.kt: 104) en kotterknife.ButterKnifeKt $ requirió $ 1.invoke (ButterKnife.kt) en kotterknife.Lazy.getValue (ButterKnife.kt: 125)

Entonces, a pesar de que Kotlin es tan genial, estoy teniendo problemas para hacer lo básico y me desanimo a migrar. ¿Realmente estoy haciendo las cosas mal? ¿O cómo puede ser tan frustrante configurar un simple clic?

Gracias.

Debe establecer las variables que están vinculadas por ButterKnife como lateinit var lugar de val . Tratar

 @BindView(R.id.btn_sale) lateinit var title: Button @BindView(R.id.btn_visit) lateinit var title: Button 

Solución: lo resolvió al deshacerse de KotterKnife y ButterKnife y usar findViewById de findViewById . Supongo que una de las ventajas del lenguaje y el progreso del marco hace que algunas bibliotecas sean obsoletas o innecesarias.

  • Cómo pasar el nombre de db en time de ejecución en kotlin
  • El complemento gradle de Android se queja de un error de traducción no detectada
  • registerReceiver () muestra error por método sobrecargado
  • Crea controles dinámicamente en Android usando Kotlin
  • Por qué los numbers que aceptan nulos no son para preservar la identidad
  • ¿Cuál es el equivalente de este código de java a kotlin
  • Tipo de parámetro Kotlin no coincide
  • Advertencia obsoleta de Kotlin Runtime (complemento Kotlin 1.1.2-release-Studio2.3-3)
  • Kotlin: configuration de un boolean privado en class Java a través de una class de datos en Kotlin. ¿Por qué no puedo hacer esto?
  • La reference de identificación de Kotlin Textview no funciona con caracteres no ingleses
  • Usando Anko getting type Error de falta de correspondencia requerido AnkoContext <ViewGroup> Found AnkoContext <Context>