Llamar a diferentes constructores de Java de Scala con Android

Necesito heredar android.support.v4.view.ViewPager y dos constructores. En Java, se hace por:

 class MyViewPager extend android.support.v4.view.ViewPager { public ViewPager(Context context) { super(context); } public ViewPager(Context context, AttributeSet attrs) { super(context, attrs); } } 

He buscado en Google y aquí por un tiempo, y algunas personas sugirieron implementar esto en Scala como este:

 import android.support.v4.view.ViewPager trait ViewPagerTrait extends ViewPager { // ...implement ViewPager non-constructor functions here... } object MyViewPager { def apply(context: Context) = new ViewPager(context) with ViewPagerTrait def apply(context: Context, attrs: AttributeSet) = new ViewPager(context, attrs) with ViewPagerTrait } 

El código Scala anterior se compila, pero parece que el método apply no se invoca correctamente cuando Android intenta construir la vista. Creo que es porque cuando el marco de Android analiza el archivo XML y trata de crear el objeto de vista, utiliza la reflexión para encontrar el constructor, por lo que no está utilizando los métodos de apply

Como LimbSoup y David mismo ya han dicho, esto es simplemente imposible en Scala. Necesitará escribir la clase en Java.

Así que la mala noticia es que necesitará algún código Java.

La buena noticia es que el compilador de Scala y la mayoría de las herramientas de Scala tienen un soporte muy bueno para las bases de código mixtas de Java / Scala. Las clases de Java y Scala pueden heredar libremente entre sí y el compilador lo resolverá perfectamente. Por lo tanto, no debería encontrarse en una situación en la que se vea obligado a escribir una cantidad sustancial de código en Java.

  • Problema: "Extracción" de JSON usando ascensor-json en una aplicación Android (Scala)
  • Problemas con la ejecución del archivo APK de Android al fusionar archivos dex con Scala
  • Scala + Android Novato
  • Cómo administrar la autenticación / autorización para las solicitudes de usuarios enviadas desde aplicaciones móviles nativas que llaman a Play2! -Scala REST services
  • Cómo orientar Android con Scala 2.8 Trunk builds
  • Aplicación IntelliJ IDEA android scala
  • Android + Scala + Intelli 13
  • Proyecto LibGDX escrito en Scala, en Android, con IntelliJ
  • ¿Los objetos de Scala sobreviven a que la actividad se reinicie en Android?
  • ¿Es Scala para mí? (Desarrollador C # con enfoque en el estilo funcional / OOP)
  • ¿Cómo puedo usar Android con Java y un núcleo hecho con Scala?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.