English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Vordergrund: Manchmal müssen aufgrund von Anzeigeschwerpunkten viele Felder im ListView angezeigt werden. Daher muss der Item außerhalb des ScrollView eingebettet werden, was zu Problemen führt, wenn der ListView auf Klickereignisse reagieren muss. Da durch die Verwendung des ScrollView der Klickereignisablauf des ListView unterbrochen wird, ist es erforderlich, den ListView neu zu implementieren.
/** * * @author Author: Yihuangxing * * @da2016Year10Month24Day * * @toTODO Class description: Solution to the problem of nesting ScrollView within ListView, where ScrollView intercepts the ListView item click event * * * When nesting ScrollView within listview, horizontal and vertical scrolling work normally, but it is impossible to click on the listview item. After consulting the Android dispatch mechanism, the problem was solved by inheriting ListView and overriding ListView's onInterceptTouchEvent. * * Always call listview's onTouchEvent in onInterceptTouchEvent to ensure that all listview events are executed, * super.onInterceptTouchEvent(ev) does 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; // Bestimme, ob es sich um ein horizontales oder vertikales Scrollen handelt. Bei vertikalem Scrollen blockiere die move- und up-Events (sonst würde es durch die gleichzeitige Ausführung von ListView und ScrollView zu Ruckeln kommen) 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); } }
Wie oben beschrieben, ist dies eine Lösung, die der Redakteur den Lesern vorgestellt hat, um die Lösung für die Verwendung von ScrollView in den Items von Android ListView zu bieten. Hoffe, das hilft Ihnen. Wenn Sie Fragen haben, hinterlassen Sie bitte eine Nachricht, der Redakteur wird rechtzeitig antworten. Vielen Dank auch für die Unterstützung der Website Anleitungshauch!
Erklärung: Der Inhalt dieses Artikels wurde aus dem Internet bezogen und gehört dem Urheberrechtsinhaber. Der Inhalt wurde von Internetbenutzern freiwillig beigesteuert und hochgeladen. Diese Website besitzt keine Eigentumsrechte und hat den Inhalt nicht von Hand bearbeitet. Diese Website übernimmt keine rechtlichen Verantwortlichkeiten. Wenn Sie urheberrechtliche Inhalte finden, die beanstandet werden, senden Sie bitte eine E-Mail an: notice#oldtoolbag.com (Bitte ersetzen Sie # durch @, wenn Sie eine E-Mail senden, um eine Meldung zu machen, und stellen Sie relevante Beweise zur Verfügung. Sobald die Inhalte nachgewiesen werden, wird diese Website die fraglichen urheberrechtlichen Inhalte sofort löschen.)