Mantenga BaseActivity en Java compatible con la actividad de Kotlin

Me gustaría saber si hay una forma de mantener una BaseActivity (Java) que tenga, por ejemplo, BottomNavigationView funcional para Java y Kotlin Activities. En el futuro, pretendo convertir las (varias) actividades de Java en Kotlin, ya que las nuevas actividades se desarrollan en Kotlin. El problema es que Java puede mantener BottomNavigationView creado correctamente ya que Kotlin juega como nulo y la carga de BottomNavigationView se produce después de que el bucle se mantuvo como en Java. Otro bash fue tratar de convertir mi Java BaseActivity en Kotlin pero rompió el funcionamiento de las diversas actividades de Java.

class KotlinActivity : BaseActivity() { public override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_my_wishes_list) ButterKnife.bind(this) //bottomNavigationMenu is null and lost all configurations from the BaseActivity bottomNavigationMenu.menu.getItem(0).isChecked = true } } public class BaseActivity extends AppCompatActivity { @BindView(R.id.bottom_navigation_menu) protected BottomNavigationView bottomNavigationMenu; @Override protected void onPostCreate(@Nullable Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); setupBottomMenu(); } private void setupBottomMenu() { if (bottomNavigationMenu != null) { BottomNavigationViewHelper.removeShiftMode(bottomNavigationMenu); bottomNavigationMenu.setOnNavigationItemSelectedListener( new BottomNavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { setupBottomMenuListener(item); return true; } }); } } private void setupBottomMenuListener(@NonNull MenuItem item) { switch (item.getItemId()) { //... } } } 

¿Por qué no simplemente usa Kotlin Android Binding? Que es una extensión de Kotlin ayuda a enlazar la vista sin ningún "bindView" o código findViewById para interferir en la lógica empresarial.

echar un vistazo. https://kotlinlang.org/docs/tutorials/android-plugin.html

Intenta agregar un Unbinder a tu class base

 protected Unbinder mUnbinder; 

Y luego en cada una de sus subclasss, configure mUnbinder

 mUnbinder = ButterKnife.bind(this); 

Este enlace discute el problema. Unbinder a Unbinder en tu class base cuando termine (después de verificar nulo).

Si / cuando va a una implementación completa de Kotlin, probablemente pueda soltar el cuchillo de mantequilla por completo.

Gracias @Les y @Daryl Sze! ¡Unirse a la extensión más Unbinder logró el mismo comportamiento que una Actividad Java!

 this.mUnbinder = ButterKnife.bind(this) apply plugin: 'kotlin-android' apply plugin: 'android-apt' apply plugin: 'kotlin-android-extensions' 
  • kotlin, ¿cómo simplificar pasar los parameters al constructor de la class base?
  • El constructor de SAM networkingundante no se puede eliminar para la function declarada de Kotlin, pero funciona en la function declarada de Java
  • ¿Los operadores con nulos son válidos dentro de la class genérica?
  • ¿Cómo se comstack el proyecto Java + Kotlin con Maven?
  • Eliminar ruptura en Kotlin cuando expresión
  • Kotlin con map (No se muestra el marcador)
  • Error: contiene campo final ilegal -Kotlin
  • ¿Cómo ejecuto testings comstackndo un file kotlin en la memory y verifico el resultado?
  • Kotlin: Actualizar elemento de list inmutable
  • Android Studio falla refactorizando el código generado de kapt "de solo lectura"
  • TornadoFX envuelve las classs de dominio en ItemViewModel