Inyección de Butterknife View

Me tropecé con una biblioteca de inyección de dependencia muy interesante llamada ButterKnife . Usando ButterKnife es fácilmente posible inyectar Views en actividades o fragmentos.

 class ExampleActivity extends Activity { @InjectView(R.id.title) TextView title; @InjectView(R.id.subtitle) TextView subtitle; @InjectView(R.id.footer) TextView footer; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.simple_activity); ButterKnife.inject(this); // TODO Use "injected" views... } } 

Sin embargo, si se usa Inyección de Dependencia, esas Vistas deben ser public para que Butterknife pueda inyectarlas (usando campos private campos de excepción fields must not be private or static ).

En mi proyecto pasado siempre hice todos los campos de miembro (incluyendo las opiniones) private como pensé que esto es la mejor práctica (la información que oculta etc.) ahora me estoy preguntando si hay una razón por la que uno no debe hacer todos los puntos de vista public ? En este caso no puedo usar ButterKnife pero quiero usarlo porque simplifica mucho el código.

One Solution collect form web for “Inyección de Butterknife View”

En primer lugar, Butter Knife no es una biblioteca de inyección de dependencia. Usted puede pensar en ello como una biblioteca de reducción de calidades ya que todo lo que hace es reemplazar findViewById y varias llamadas setXxxListener .

La razón por la que Butter Knife requiere que las vistas no sean privadas es que en realidad genera código que establece los campos. El código que genera vive en el mismo paquete que tu clase, por lo que el campo debe ser privado, protegido o público. Si el campo fuera privado el código generado no podría compilar ya que no puede tener acceso al campo privado.

El código generado se parece a esto:

 public static void inject(ExampleActivity target, ExampleActivity source) { target.title = (TextView) source.findViewById(R.id.title); target.subtitle = (TextView) source.findViewById(R.id.subtitle); target.footer = (TextView) source.findViewById(R.id.footer); } 

Cuando llama a ButterKnife.inject(this) busca esta clase generate y llama al método inject con su instancia de ExampleActivity como el destino de los campos y el origen de findViewById llamadas findViewById .

  • Ventajas de inyectar el autobús de eventos de Otto en lugar de usar singleton estático
  • OkHttp Interceptor utilizando OkHttpClient sin ciclo de dependencia
  • ¿Cuál es el razonamiento para separar los métodos RestAdapter.build () y .create () al usar Dagger?
  • Inyectar objetos de objetos en Class Util (usando Dagger)
  • ¿Cómo se compara Transfuse con Dagger?
  • Manejo del componente de la daga en el cambio de orientación
  • Guice Performance en Android
  • Alcance y subcomponentes de Dagger 2
  • Lazy Injection con Dagger 2 en Android
  • Dagger and Butter Knife vs Android Annotations
  • Aplicación para Android con RoboGuice 2.0 - Cómo inyectar un singleton con el contexto de la aplicación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.