Esos días se han ido cuando ListView , GridView , RecyclerView y Pesky Adapters dominaban la arena. Saluda a PlaceHolderView ???? Agregar oyentes a cada RecyclerView e implementar contenido dinámico es una operación tediosa. Ni siquiera hablemos de animación; si tenemos que realizarlo para Recicladores anidados, será un desastre. ¿Qué pasaría si pudiéramos reemplazar ListView, GridView y RecyclerView con facilidad y simplicidad usando una interfaz muy básica con capacidad adicional y sin implementación de adaptador?
¿Cuál es el propósito de la clase PlaceHolderView?
PlaceHolderView automatiza el proceso de configuración de los adaptadores de View eliminando todo el código repetitivo. Lo increíble es que no hay necesidad de un adaptador. El código se vuelve increíblemente modular y la capacidad de agregar anotaciones a cualquier vista o método le da mucha flexibilidad. No hay códigos antiestéticos como findViewById o onClickListener.
- Con solo una línea de código, puede crear animaciones sorprendentes para los objetos de vista.
- La gestión de la memoria es muy sencilla.
¿Cómo introducir esta gran vista en el proyecto?
Bueno, la respuesta es bastante simple. PlaceHolderView es una vista que le permite ver lo que está pasando. Algunas de las vistas de la biblioteca PlaceHolderView se basan en RecyclerView, mientras que otras se crean desde cero. Para producir las clases de enlace, todas las anotaciones se procesan durante el proceso de construcción. Hay dos variantes diferentes para elegir.
- Utiliza la reflexión de Java en la versión anterior (rama 1.x).
- El procesamiento de anotaciones ahora es compatible con la nueva versión (rama 2.x).
Para agregar esta biblioteca a su proyecto de Android, simplemente coloque esta línea en su Gradle (proyecto) y luego presione ‘Sincronizar’ .
Kotlin
implementation 'com.mindorks.android:placeholderview:1.0.3' implementation 'com.android.support:recyclerview-v7:27.1.0' implementation 'com.mindorks.android:placeholderview:1.0.3' kapt 'com.mindorks.android:placeholderview-compiler:1.0.3'
Y luego, mágicamente, PlaceHolderView se agrega a su proyecto Android actual
Paso #1 : en el diseño XML, cree un PlaceHolderView. Después de eso, debe modificar sus archivos XML y agregar o reemplazar la vista actual, para hacerlo, simplemente siga el fragmento de código a continuación
XML
<com.mindorks.placeholderview.PlaceHolderView android:id="@+id/geeksForGeeksView" android:layout_width="match_parent" android:layout_height="wrap_content"/>
Ahora Paso #2: Cree la vista de los elementos que necesita inflar en su Vista PlaceHolder
XML
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp"> <android.support.v7.widget.CardView android:layout_width="match_parent" android:layout_height="wrap_content" app:cardCornerRadius="8dp" app:cardElevation="10dp"> <ImageView android:id="@+id/geekyImage" android:layout_width="match_parent" android:layout_height="200dp" android:scaleType="centerCrop" android:src="@android:color/holo_orange_dark"/> </android.support.v7.widget.CardView> </LinearLayout>
Paso #3: Ahora, en el archivo Java de MainActivity o Adapter Activity, simplemente vincule los métodos para que puedan identificarse durante el tiempo de ejecución .
Java
@Animate(Animation.ENTER_RIGHT_DESC) @NonReusable @Layout(R.layout.gallery_item_big) public class GeeksImage { @View(R.id.imageView) private ImageView imageView; private String mUrl; private Context mContext; private PlaceHolderView mPlaceHolderView; public ImageTypeBig(Context context, PlaceHolderView placeHolderView, String url) { mContext = context; mPlaceHolderView = placeHolderView; mUrl = url; } @Resolve private void onResolved() { Glide.with(mContext).load(mUrl).into(imageView); } @LongClick(R.id.imageView) private void onLongClick() { mPlaceHolderView.removeView(this); } }
Paso 4. Para este último paso, simplemente aumente las vistas a la vista de marcador de posición y estará listo para continuar.
Java
PlaceHolderView mGalleryView = (PlaceHolderView)findViewById(R.id.galleryView); .setHasFixedSize(true) .setItemViewCacheSize(15) .setLayoutManager(new GridLayoutManager(this, 3)); mGalleryView.addView(new GeekImage(this.getApplicationContext(), mGalleryView, url1)); .addView(new GeekImage(this.getApplicationContext(), mGalleryView, url2)); .addView(new GeekImage(this.getApplicationContext(), mGalleryView, url3)); .addView(new GeekImage(this.getApplicationContext(), mGalleryView, url4));
¡Eso es todo!
Acaba de dominar el arte de usar PlaceHolderView y nunca volverá a mirar hacia atrás a las opciones de vista anteriores, y ahora parecerá sorprendentemente inferior.
GeekTip : PlaceHolderView reciclará viewItems e intentará rellenar los datos del viewItem actual con viewItems similares/del mismo tipo de vista. Como resultado, siempre que se asocie viewItem a la ventana, se invocará el método anotado con @Resolve. Es decir, si no completa explícitamente viewItem en un método anotado con @Resolve, ese viewItem puede mostrar el historial de un viewItem utilizado anteriormente.
En lugar de usar un método marcado con @Resolve, intente instanciar cualquier clase en la función Object() { [código nativo] }.
Deje la lista vacía inicialmente si itemView contiene PlaceHolderView/ListViews y el elemento se agrega mediante un método marcado con @Resolve. Esto es necesario porque si la vista reciclada contiene PlaceHolderView/ListViews de otras vistas de elementos, es posible que se inserten elementos de vista duplicados. Antes de agregar vistas a un método marcado con @Resolve, use removeAllViews() para PlaceHolderView.
Publicación traducida automáticamente
Artículo escrito por therebootedcoder y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA