¿Es posible inyectar en campo un adaptador de vista de reciclador con Dagger 2.11

He estado usando las nuevas dagger.android inyección dagger.android y hasta ahora realmente las he estado disfrutando.

Sin embargo, me encontré con este pequeño problema por el cual parece imposible insert en el campo un adaptador o básicamente cualquier class de no actividad que estoy usando.

Sé que sería más fácil @Inject the constructor pero dado que estoy pasando los datos a mi recyclerview a través del constructor, esta no es una opción para mí.

Esto significa que tengo que llamar al componente para inyectar mi class.

Con una class AppComponent que se ve así:

 interface AppComponent : AndroidInjector<App> { @Component.Builder abstract class Builder { abstract fun networkModule(networkModule: NetworkModule): Builder } fun inject(someClass SomeClass) } 

El DaggerAppComponent generado no reconoce un método .inject() después de decir DaggerAppComponent.builder().build()

Obviamente estoy malinterpretando algo sobre Dagger porque esta parece ser la manera canónica de inyectar una class.

Sospecho que es porque me estoy extendiendo desde AndroidInjector pero si este es el caso, ¿cómo inyectaría una class que no sea de actividad? Porque incluso si @Subcomponent un @Subcomponent de @Subcomponent para esa class, todavía tendría que ser llamado desde DaggerAppComponent

Es una cuestión de gusto (y un layout de código más perfecto), pero no creo que lo estés haciendo de la manera correcta.

¿A qué te refieres con "dado que paso los datos a mi vista del reciclador a través del constructor"? Usted asigna datos al Adaptador, no a la propia vista del reciclador.

Si no quiere (pero probablemente debería) usar el enfoque de MVP, el objective de cargar datos desde algún lugar y luego mostrarlo con RCV sería algo como esto:

 class TestFragment : Fragment() { val recyclerView: RecyclerView by bind(R.id.recyclerview) // Custom view binding but whatever val adapter: TestAdapter? = null override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { val view = inflater!!.inflate(R.layout.test, container, false) // Initialize recyclerView.layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false) adapter = TestAdapter(mutableListOf()) recyclerView.adapter = adapter // Add data adapter.addItem(MyClass("Hey it's working")) return view } } 

En cuanto a la daga android, en realidad no la encuentro más útil que la daga normal. Hace las cosas aún más complicadas.

Recomiendo usar MVP para Android. Aquí hay una muestra mía, que elimina la necesidad de una actividad / componente para inyectar dependencies, siéntase libre de echar un vistazo a la muestra MVP

  • Retrofit no se pudo publicar en samsung s3 versión Android 4.0.4 mientras estaba en datos
  • ¿Cómo manejar los errores de escritura en Apache Jena?
  • Deshabilitar un button
  • Operador nuevo en Kotlin (syntax)
  • ¿Cómo utilizar las annotations de tipo de soporte de Android en kotlin?
  • Verificar si la function está vacía en Kotlin
  • ¿Cómo get el elemento seleccionado de ListView en Kotlin?
  • Kotlin IllegalAccessError con + = y - = para la interfaz delegada
  • ¿Cómo simplificar múltiples controles de igual a igual en las condiciones?
  • ¿Es posible iniciar una variable en el cuerpo de la condición while para Kotlin?
  • ¿Cómo consumir fácilmente un productor de canal Kotlin en Java?