English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Soluzione per l'inserimento di ScrollView all'interno di un item di ListView in Android

 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.

Ti potrebbe interessare