English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Avanzado: A veces, los campos que deben mostrarse en el item de listview son muchos, y debido a los problemas de visualización, es necesario que el item esté envuelto en ScrollView para lograrlo, entonces surge el problema: cuando el listview necesita realizar eventos de clic, debido al uso anidado de ScrollView, se intercepta el evento de clic de listview: solo se puede sobrescribir el listview para lograrlo.
/** * * @author Autor: Yihuangxing * * @da2016Año10Mes24Día: * * @toTODO Descripción de la clase: Solución para el problema de que ScrollView intercepta el evento de clic del elemento de ListView cuando se inserta dentro de él * * * Al insertar ScrollView dentro de listview, se observa que tanto el deslizamiento horizontal como el vertical funcionan correctamente, pero no se puede hacer clic en los elementos de listview. Después de investigar el mecanismo de distribución de Android se resolvió, se heredó de ListView y se sobrescribió el método onInterceptTouchEvent de ListView. * * Siempre se llama onTouchEvent de listview en onInterceptTouchEvent para asegurar que todos los eventos de listview se ejecuten. * super.onInterceptTouchEvent(ev) no intercepta el deslizamiento horizontal que se debe pasar a ScrollView. */ public class MyListView extends ListView { private int flag = 0; private float StartX; private float StartY; public MyListView(Context context) { super(context); // TODO Auto-constructor de plantilla generado } public MyListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // TODO Auto-constructor de plantilla generado } public MyListView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-constructor de plantilla generado } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { // Siempre se llama al manejo de eventos de touch de listview onTouchEvent(ev); if (ev.getAction() == MotionEvent.ACTION_DOWN) { StartX = ev.getX(); StartY = ev.getY(); return false; } if (ev.getAction() == MotionEvent.ACTION_MOVE) { float ScollX = ev.getX() - StartX; float ScollY = ev.getY() - StartY; // Determinar si es un deslizamiento horizontal o vertical, si es un deslizamiento vertical, interceptar eventos move y up (no interceptar causará que ListView y ScrollView ejecuten el deslizamiento al mismo tiempo, lo que causará que el deslizamiento se detenga) if (Math.abs(ScollX) < Math.abs(ScollY)) { flag = 1; return true; } return false; } if (ev.getAction() == MotionEvent.ACTION_UP) { if (flag == 1{ return true; } return false; } return super.onInterceptTouchEvent(ev); } }
Lo mencionado anteriormente es la solución que el editor le ha presentado a todos sobre cómo insertar ScrollView en el item de Android ListView, esperamos que sea útil para todos. Si tienen alguna pregunta, por favor déjenos un mensaje, el editor responderá a tiempo. También agradecemos enormemente el apoyo de todos a la página web de呐喊教程!
Declaración: El contenido de este artículo se ha obtenido de la red, es propiedad del autor original, el contenido se ha contribuido y subido por los usuarios de Internet, este sitio no posee los derechos de propiedad, no se ha realizado un procesamiento editorial manual y no asume la responsabilidad legal correspondiente. Si encuentra contenido sospechoso de copyright, por favor envíe un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, por favor reemplace # con @) para denunciar, y proporcione evidencia relevante. Una vez verificada, este sitio eliminará inmediatamente el contenido sospechoso de infracción.