English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Avant-garde : Parfois, les champs à afficher dans les éléments de listview sont nombreux. En raison des problèmes de visualisation, les éléments doivent être enveloppés par un ScrollView pour résoudre cela, et voici le problème : lorsque le listview doit gérer des événements de clic, en raison de l'utilisation imbriquée de ScrollView, cela intercepte l'événement de clic du listview : il faut donc redéfinir le listview pour le réaliser.
/** * * @author Author: Yihuangxing * * @da2016Year:10Month:24Day: * * @toTODO Class description: Solution to the problem of nesting ScrollView within ListView, where ScrollView intercepts the ListView's item click events * * * When nesting ScrollView in listview, horizontal and vertical scrolling are normal, but cannot click on the Listview's Item. After consulting the Android dispatch mechanism, the problem was solved by inheriting ListView and rewriting ListView's onInterceptTouchEvent. * * Always call listview's onTouchEvent in onInterceptTouchEvent to ensure that all listview events are executed, * super.onInterceptTouchEvent(ev) will not intercept the horizontal scrolling that needs to be passed to ScrollView. */ public class MyListView extends ListView { private int flag = 0; private float StartX; private float StartY; public MyListView(Context context) { super(context); // TODO Auto-generated constructor stub } public MyListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // TODO Auto-generated constructor stub } public MyListView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { // Always call the touch event handler of 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; // Déterminer s'il s'agit d'un glissement horizontal ou vertical, et intercepter les événements move et up si c'est un glissement vertical (ne pas intercepter causera des tremblements lorsque la listView et le scrollView exécutent simultanément des glissements). 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); } }
Ce que j'ai présenté à l'éditeur ici est une solution pour insérer un ScrollView dans l'item d'une ListView Android, j'espère que cela peut aider. Si vous avez des questions, n'hésitez pas à laisser un message, l'éditeur répondra rapidement. Je tiens également à remercier chaleureusement les utilisateurs du site呐喊教程 pour leur soutien !
Déclaration : Le contenu de cet article est issue du réseau, et appartient à l'auteur original. Le contenu est fourni par les utilisateurs d'Internet, téléchargé de manière spontanée, ce site ne détient pas de droits de propriété, n'a pas été traité par l'éditeur humain et n'assume aucune responsabilité juridique. Si vous trouvez du contenu présumé enfreindre les droits d'auteur, veuillez envoyer un email à : notice#oldtoolbag.com (veuillez remplacer # par @ lors de l'envoi d'un email pour signaler une violation, et fournir des preuves pertinentes. Une fois confirmée, le site supprimera immédiatement le contenu présumé enfreindre les droits d'auteur.)