¿Es posible hacer el ListView
horizontal? He hecho esto usando una vista de galería, pero el elemento seleccionado llega al centro de la pantalla automáticamente. No quiero el elemento seleccionado en el mismo lugar en el que hice clic. ¿Cómo puedo rectificar este problema? Mi idea era establecer el ListView
con un desplazamiento horizontal. Comparte tu idea?
android
listview
gallery
horizontal-scrolling
Praveen
fuente
fuente
Respuestas:
Según la documentación de Android,
RecyclerView
es la nueva forma de organizar los elementos en la vista de lista y mostrarlos horizontalmenteVentajas:
Más información sobre
RecyclerView
:Muestra:
survivingwithandroid.com
Simplemente agregue el siguiente bloque para hacer
ListView
que sea horizontal desde verticalFragmento de código
fuente
Paul no se molesta en corregir los errores de su biblioteca ni acepta las correcciones de los usuarios. Es por eso que sugiero otra biblioteca que tenga una funcionalidad similar:
https://github.com/sephiroth74/HorizontalVariableListView
Actualización : el 24 de julio de 2013, el autor (sephiroth74) lanzó una versión completamente reescrita basada en el código de Android 4.2.2 ListView. ¡Debo decir que no tiene todos los errores que tenía la versión anterior y funciona muy bien!
fuente
La respuesta de @Paul vincula a una gran solución, pero el código no permite usar onClickListeners en elementos secundarios (nunca se llama a las funciones de devolución de llamada). He estado luchando durante un tiempo para encontrar una solución y he decidido publicar aquí lo que necesita modificar en ese código (en caso de que alguien lo necesite).
En lugar de anular la
dispatchTouchEvent
anulaciónonTouchEvent
. Use el mismo códigodispatchTouchEvent
y elimine el método (puede leer la diferencia entre los dos aquí http://developer.android.com/guide/topics/ui/ui-events.html#EventHandlers )Luego, agregue el siguiente código que decidirá robar el evento de los elementos secundarios y dárselo a nuestro
onTouchEvent
, o dejar que sea manejado por ellos.Finalmente, no olvides declarar las variables en tu clase:
fuente
Desde que Google introdujo la Biblioteca de soporte de Android v7 21.0.0, puede usar RecyclerView para desplazar elementos horizontalmente. El widget RecyclerView es una versión más avanzada y flexible de ListView.
Para usar RecyclerView, simplemente agregue dependencia:
Aquí hay una muestra:
Más información sobre RecyclerView:
fuente
Esto es un poco (muy) tarde, pero estoy publicando esto en caso de que alguien venga más tarde.
La biblioteca de soporte a partir de la vista previa de Android L tiene una función
RecyclerView
que hace exactamente lo que desea.En este momento, sólo se puede conseguir a través del SDK L de vista previa y que necesita para establecer su
minSdk
aL
. Pero puede copiar todos los archivos necesarios en su proyecto y usarlos de esa manera hasta que L salga oficialmente.Puede descargar los documentos de vista previa aquí .
Advertencia: La API para Recycler View puede cambiar y puede tener errores.
Actualizado
El código fuente para la vista de lista horizontal es:
fuente
LinearLayoutManager
- vea aquí: stackoverflow.com/questions/28460300/…Descargue el archivo jar desde aquí
ahora colóquelo en su carpeta libs, haga clic derecho y seleccione 'Agregar como biblioteca'
ahora en main.xml pon este código
ahora en la clase de actividad si desea la vista de lista horizontal con imágenes, luego coloque este código
fuente
En realidad es muy simple : simplemente gire la vista de lista para colocarla de lado
mlistView.setRotation(-90);
Luego, al inflar los elementos secundarios, eso debería estar dentro del método getView. giras a los niños para pararse derechos:
Editar: si su ListView no se ajusta correctamente después de la rotación, coloque el ListView dentro de este RotateLayout de esta manera:
fuente
Mi solución es simplemente usar el
ViewPager
widget. No está bloqueado en el centro comoGallery
y tiene características incorporadas para reciclar vistas (comoListView
). Es posible que vea un enfoque similar en la aplicación Google Play, siempre que trate con listas desplazables horizontalmente.Solo necesita extender
PagerAdapter
y realizar un par de ajustes allí:Como resultado, tendrá un widget desplazable horizontalmente con adaptador, como este:
fuente
Nota: Android ahora admite vistas de lista horizontal utilizando RecyclerView, por lo que ahora esta respuesta está en desuso, para obtener información sobre RecyclerView: https://developer.android.com/reference/android/support/v7/widget/RecyclerView
He desarrollado una lógica para hacerlo sin usar ninguna biblioteca de vista de desplazamiento horizontal externa, aquí está la vista horizontal que logré y publiqué mi respuesta aquí: https://stackoverflow.com/a/33301582/5479863
Mi respuesta json es esta:
Archivo de diseño:
archivo de clase:
El truco que está funcionando aquí es la identificación que he asignado a ImageView "imgView.setId (v)" y luego de aplicar onClickListener a eso, nuevamente estoy recuperando la identificación de la vista ... También he comentado dentro del código, así que que es fácil de entender, espero que esto sea muy útil ... Happy Coding ... :)
fuente
getPixelsToDP()
?Esto no es una gran respuesta, pero ¿qué tal usar una Vista de desplazamiento horizontal ?
fuente
Puede usar RecyclerView en la biblioteca de soporte. RecyclerView es una versión generalizada de ListView que admite:
Android Recycler Ver documentos
fuente
He buscado mucho para encontrar una solución a este problema. La respuesta corta es que no hay una buena solución, sin anular los métodos privados y ese tipo de cosas. Lo mejor que encontré fue implementarlo yo mismo desde cero extendiéndolo
AdapterView
. Es bastante miserable. Vea mi pregunta SO sobre ListViews horizontales .fuente
fillListDown()
método, debe realizar un seguimiento del borde inferior del último elemento de la lista. Pero no sabe dónde está esa ventaja hasta que realmente crea el último elemento (adapter.getCount () - 1). Entonces espera hasta que se cree ese elemento y luego puede almacenar la ubicación del borde. Una vez que sepa eso, puede asegurarse de que mListTop nunca sea menor que 0 y nunca más que el alto de la lista.Tuve que hacer lo mismo para uno de mis proyectos y terminé escribiendo el mío también. Lo llamé HorzListView ahora es parte de mi biblioteca Aniqroid de código abierto .
http://aniqroid.sileria.com/doc/api/ (Busque descargas en la parte inferior o use el proyecto de código de Google para ver más opciones de descarga: http://code.google.com/p/aniqroid/downloads/list )
La documentación de la clase está aquí: http://aniqroid.sileria.com/doc/api/com/sileria/android/view/HorzListView.html
fuente
Para mi aplicación, uso un HorizontalScrollView que contiene LinearLayout dentro, que tiene la orientación establecida en horizontal. Para agregar imágenes dentro, creo ImageViews dentro de la actividad y los agrego a mi LinearLayout. Por ejemplo:
Y esto funciona perfectamente bien para mí. En la actividad, todo lo que tengo que hacer es algo como el siguiente código:
Como dije, eso funciona para mí, y espero que ayude a alguien que busque lograr esto también.
fuente
bueno, siempre puedes crear tus vistas de texto, etc. dinámicamente y configurar tus onclicklisteners como lo harías con un adaptador
fuente
HorizontialListView no puede funcionar cuando los datos en el adaptador están involucrados en otro hilo. Todo funciona al 100% en el subproceso de la interfaz de usuario. Este es un gran problema en multithread. Creo que usar HorizontialListView no es la mejor solución para su problema. HorzListView es una mejor manera. Simplemente reemplace su Galería anterior con HorzListView. No necesita modificar el código del adaptador. Entonces todo va de la manera que espera. Vea https: // stackoverflow.com/a/12339708/1525777 sobre HorzListView.
fuente
Había usado un enlace de vista de lista horizontal en mi proyecto y obtuve buenos resultados. Inicialmente había usado la biblioteca devsmart , pero me dio algunos problemas. Entonces, la mejor manera de usar el enlace de vista de lista horizontal, ya que recuperó mis problemas y también recientemente lancé mi aplicación en Google PlayStore usando esta biblioteca y obtuve una buena respuesta de los usuarios. Por lo tanto, le recomiendo que use la misma biblioteca que mencioné anteriormente para mostrar la vista de lista horizontalmente. Disfruta :)
fuente
Hay una gran biblioteca para eso, llamada TwoWayView , es muy fácil de implementar, solo incluya la biblioteca del proyecto en su espacio de trabajo y agréguela como un proyecto de biblioteca a su proyecto original, y luego siga los siguientes pasos que se mencionan originalmente aquí :
Luego,
y, por último, simplemente declararlo y tratarlo como cualquier otro regular
ListView
:Todos los métodos de
ListView
funcionarán aquí como de costumbre, pero solo noté una diferencia, que es cuando configuro el modo de elección, el métodosetChoiceMode
no toma unint
valor sino un valor deenum
llamadoChoiceMode
, asílist_view.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
serálvTest.setChoiceMode(ChoiceMode.SINGLE); // or MULTIPLE or NONE
.fuente
Puede usar ViewFlipper para incluir el diseño XML y agregar imágenes, vista de lista para cada diseño XML
fuente