English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Premessa: A volte, nel caso di ListView, c'è bisogno di mostrare molti campi per l'item, quindi per problemi di visualizzazione, l'item deve essere incluso all'interno di un ScrollView. Così, si presenta un problema: quando la ListView deve gestire eventi di click, a causa dell'uso sovrapposto di ScrollView, si inceppa l'evento di click della ListView: è necessario sovrascrivere la ListView per implementare.
*/ * * @author Autore: Yihuangxing * * @da 24 ottobre 2016 Ora: * * @toTODO Descrizione della classe: Soluzione per il problema di intersezione di ListView con ScrollView, dove ScrollView blocca il clic sugli elementi di ListView * * * Quando si inserisce un ScrollView all'interno di una listview, l'orizzontale e lo scorrimento verticale funzionano correttamente, ma non è possibile fare clic sugli elementi della listview. Dopo aver consultato il meccanismo di distribuzione di Android, è stato risolto ereditando ListView e ricreando onInterceptTouchEvent di ListView. * * In onInterceptTouchEvent si chiama sempre onTouchEvent della listview per garantire che tutti gli eventi della listview vengano eseguiti. * super.onInterceptTouchEvent(ev) non blocca lo scorrimento orizzontale necessario per il ScrollView. */ public class MyListView extends ListView { private int flag = 0; private float StartX; private float StartY; public MyListView(Context context) { super(context); // TODO Stub generato automaticamente dal costruttore } public MyListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // TODO Stub generato automaticamente dal costruttore } public MyListView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Stub generato automaticamente dal costruttore } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { // Sempre chiama il gestore degli eventi touch della 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; // Giudicare se è uno scorrimento orizzontale o verticale, se è uno scorrimento verticale, bloccare l'evento move e l'evento up (non bloccare会造成listview e scrollview同时执行滑动卡顿) 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); } }
Come è stato introdotto dall'editor, la soluzione per l'embedding di ScrollView nell'item di Android ListView, speriamo che sia utile a tutti. Se avete qualsiasi domanda, lasciate un commento e l'editor risponderà prontamente. Ringraziamo anche tutti i sostenitori del sito web delle guide a urla!
Dichiarazione: il contenuto di questo articolo è stato tratto da Internet, il diritto d'autore spetta al proprietario originale, il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, questo sito non detiene i diritti di proprietà, non è stato elaborato manualmente e non assume responsabilità legali correlate. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare il problema e fornire prove pertinenti. Una volta verificata, questo sito rimuoverà immediatamente i contenuti sospetti di violazione del copyright.