2011-07-04 36 views
9

Hãy nói rằng, tôi có một ListView Android mà tôi kèm theo một OnItemClickListener tới:Lấy nhấp chuột tọa độ trong Android ListView OnItemClickListener

ListView listView = (ListView) findViewById(...); 
listView.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     [...] 

Khi một mục nào đó trong giao diện được nhấp, tôi có thể tìm ra các hình chữ nhật tương ứng bằng nhận được kích thước của view. Tuy nhiên, tôi muốn có được tọa độ tương ứng thậm chí chính xác hơn để xác định điểm trên màn hình mà người dùng thực sự đã nhấp vào.

Rất tiếc, API OnItemClickListener dường như không hiển thị thông tin này. Có cách nào khác để nắm giữ chi tiết này (không tự hào tái tạo bánh xe bằng cách triển khai ListView của riêng tôi) không?

Trả lời

19

Tôi cũng cần làm điều này. Tôi đặt OnTouchListener và OnItemClickListener trên ListView. Trình nghe cảm ứng được kích hoạt trước tiên, vì vậy bạn có thể sử dụng nó để thiết lập một biến mà bạn có thể truy cập từ onItemClick() của bạn. Điều quan trọng là onTouch() của bạn trả về false, nếu không nó sẽ tiêu thụ tap. Trong trường hợp của tôi, tôi chỉ cần tọa độ X:

private int touchPositionX; 

... 

getListView().setOnTouchListener(new OnTouchListener() { 
    public boolean onTouch(View view, MotionEvent event) { 
    touchPositionX = (int)event.getX(); 
    return false; 
    } 
}); 

getListView().setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    if (touchPositionX < 100) { 
    ... 
+0

Cảm ơn, có vẻ tốt! –

+0

Đây là một giải pháp tốt đẹp. Cảm ơn. – MattD

Các vấn đề liên quan