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' 
  • ¿Cuál es la diferencia si elimino la palabra key 'var' en una class?
  • Referencias circulares con vals en Kotlin
  • Ir a la siguiente actividad en Android Kotlin; Referencia de class no resuelta
  • ¿Cómo migrar de Gradle a Kobalt?
  • ¿Cómo puedo crear un encabezado de columna nested / dividido usando TornadoFx?
  • Cargar recurso del directory local sin class
  • ¿Cómo puedo conectar un productor a un actor?
  • RuntimeException si minifyEnabled es verdadero con la class ViewModel
  • @XmlElement no funciona cuando se usa en kotlin
  • Patrón de constructor en Kotlin
  • Leer valores de tipo de datos primitivos en Kotlin