在我的應用程序中,我的ListView有一個Touchlistener。使用TouchListener,我可以從觸摸事件中獲取X和Y座標。現在我想從ListView中獲取點擊的項目。我如何才能在listView中使用onTouchListener獲取單擊項目的位置?我不想使用onItemClickedListener。從ListView中獲取項目只能使用OnTouchListener
回答
switch (motionEvent.getActionMasked()) {
case MotionEvent.ACTION_DOWN: {
if (mPaused) {
return false;
}
// TODO: ensure this is a finger, and set a flag
// Find the child view that was touched (perform a hit test)
Rect rect = new Rect();
int childCount = mListView.getChildCount();
int[] listViewCoords = new int[2];
mListView.getLocationOnScreen(listViewCoords);
int x = (int) motionEvent.getRawX() - listViewCoords[0];
int y = (int) motionEvent.getRawY() - listViewCoords[1];
View child;
for (int i = 0; i < childCount; i++) {
child = mListView.getChildAt(i);
child.getHitRect(rect);
if (rect.contains(x, y)) {
mDownView = child; // This is your down view
break;
}
}
if (mDownView != null) {
mDownX = motionEvent.getRawX();
mDownPosition = mListView.getPositionForView(mDownView);
mVelocityTracker = VelocityTracker.obtain();
mVelocityTracker.addMovement(motionEvent);
}
view.onTouchEvent(motionEvent);
return true;
}
這工作真的很好,但如果我在ListView中向下滾動,我會看到錯誤的視圖。即使我在ListView中向下滾動,我如何實現邏輯來獲得真實的項目? – Cilenco
感謝您的解決方案,它在我的自定義列表視圖中工作得很好 – user2138983
我正在用自定義視圖來測試它,它很棒! – nemesisfixx
如果不是強制使用TouchListener
,我強烈建議使用OnItemClickListener
。它會大大簡化你的生活。
除此之外,你必須得到ListView
的當前偏移量和滾動位置,每行的高度,然後做一些數學運算來確定點(x,y)是否位於每個點的多邊形中行。由於行是矩形,數學不是太困難,但使用OnItemClickListener
會更容易。
此外,如果您做需要使用TouchListener
,你也可以使用OnItemClickListener
設置你的Adapter
類的值(或其他地方)表示最近項目點擊。然後,在您的TouchListener
中,您可以檢查該值,並使用它來關聯(x,y)座標和ListView
項目。這當然取決於OnItemClickListener
首先運行。如果反過來,您可以使其工作,但使用TouchListener
存儲觸摸位置,然後將其關聯到OnItemClickListener
。
你的類可以實現'兩個View.OnTouchListener, AdapterView.OnItemClickListener
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if(motionEvent.getAction() == MotionEvent.ACTION_UP){
Log.d(TAG, "ontouch: UP");
**// Here you can figure if it was simple item click event.
// We return false only when user touched once on the view.
// this will be handled by onItemClick listener.**
if(lastAction == -1){
lastAction = MotionEvent.ACTION_UP;
view.clearFocus();
return true;
}
return false;
}
else if(motionEvent.getAction() == MotionEvent.ACTION_DOWN){
Log.d(TAG, "ontouch: DOWN");
return false;
}
else {
// This is all action events.
lastAction = -1;
return true;
}
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// We come here after onTouch event figured out that its a simple touch event and needs to be handled here.
}
- 1. Android:從ListView中獲取所選項目
- 2. 從ListView中的項目獲取位置
- 3. 如何從listview中獲取edittext項目?
- 4. aChartEngine;從onTouchListener中獲取SeriesSelection
- 5. 能夠從WPF/C#中的選中項目中獲取ListView項目的列表?
- 6. 如何從ListView項目獲取文本?
- 7. 從多項目ListView獲取數據?
- 8. 從動態插入ListView獲取項目
- 9. Android ListView獲取項目ID
- 10. 獲取所有ListView項目?
- 11. Listview項目滾動後只能點擊
- 12. OnTouchListener MotionEvent.ACTION_MOVE:只獲取第一個視圖
- 13. 在ListView中獲取項目Windows Phone
- 14. 獲取ListView中項目的位置?
- 15. 如何獲取WPF中ListView的項目?
- 16. 獲取ListView中選定項目
- 17. 使用onActivityResult從ListView中刪除項目
- 18. GridView項上的OnTouchListener項目
- 19. ListView with onTouchListener
- 20. 如何在ListView中使用onItemClickListener獲取項目
- 21. 使用MultipleChoice獲取Listview中未檢查的項目
- 22. 從ListView中獲取所有選中的項目
- 23. 如何從Kotlin中的ListView中獲取所選項目?
- 24. 從ListView中的項目中獲取文本
- 25. 從customadapter listview中獲取所選項Android
- 26. 如何獲取listview中的項目和子項目?
- 27. 單擊ListView中的項目時獲取項目位置0
- 28. 製作Windows 8 ListView項目只能從代碼
- 29. 如何使用包含函數從ListView中獲取所選項目
- 30. 如何從onClick事件中的listview項目獲取特定項目?
使用標籤的最佳方式getView'方法並檢索標籤'onTouch'事件http://stackoverflow.com/a/10228723/1276374 –