¿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.

Solutions Collecting From Web of "¿Por qué la configuration de OnClickListener funciona una vez?"