2010-03-18 48 views
130

Làm cách nào để nghe sự kiện nhấp chuột trên một ListView?Làm thế nào để xử lý ListView bấm trong Android

Đây là những gì tôi có bây giờ

ListView list = (ListView)findViewById(R.id.ListView01); 
... 
list.setAdapter(adapter); 

Khi tôi thực hiện như sau

list.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
    public void onItemSelected(AdapterView parentView, View childView, 
                 int position, long id) 
    { 
     setDetail(position); 
    } 

    public void onNothingSelected(AdapterView parentView) { 

    } 
}); 

Đó dường như không làm bất cứ điều gì trên nhấp chuột.
Và tất cả các mã đó đều nằm trong một lớp mở rộng Hoạt động.

Trả lời

173

Vào xem danh sách của bạn, sử dụng setOnItemClickListener

+0

Cảm ơn David. Geezzz, tôi đã thử setOnClickListener và setOnItemSelectedListener nhưng bỏ lỡ đọc setOnItemClickListener. Cảm ơn, Tee – teepusink

+0

tôi đã làm tương tự như teepusink: D –

+0

Làm cách nào để bạn gửi dữ liệu đến chế độ xem chi tiết đó? (Giống như youtube nhấp chuột qua các video) – Sauron

41

Bạn cần phải thiết lập các quan điểm lạm phát "Clickable" và "thể nghe nhấp sự kiện" trong cài đặt getView lớp bộ chuyển đổi() phương pháp.

convertView = mInflater.inflate(R.layout.list_item_text, null); 
convertView.setClickable(true); 
convertView.setOnClickListener(myClickListener); 

và tuyên bố người nghe nhấp chuột trong ListActivity của bạn như sau,

public OnClickListener myClickListener = new OnClickListener() { 
public void onClick(View v) { 
       //code to be written to handle the click event 
    } 
}; 

Điều này đúng chỉ khi bạn tùy biến Adaptor bằng cách mở rộng BaseAdapter.

Tham khảo các ANDROID_SDK/samples/ApiDemos/src/com/example/android/apis/xem/List14.java để biết thêm chi tiết

+0

cảm ơn Vijay tôi đã đối mặt với vấn đề nhấp chuột trên chế độ xem thổi phồng tôi đã giải quyết câu trả lời của bạn – dhaiwat

+0

Nhưng điều này không xác định mục nào đang được nhấp vào, điều này khiến cho nó trở nên vô ích đối với danh sách? Chính xác? –

+0

bạn có thể đặt thẻ thành convertView và kiểm tra tương tự trong onClick .. sử dụng thẻ mà mục được nhấp có thể được xác định ... –

17

Hai câu trả lời trước khi tôi là chính xác - bạn có thể sử dụng OnItemClickListener. Bạn cần lưu ý rằng sự khác biệt giữa OnItemClickListenerOnItemSelectedListener, trong khi nghe có vẻ tinh tế, thực tế là đáng kể, vì lựa chọn mục và tiêu điểm có liên quan với chế độ cảm ứng của số AdapterView của bạn.

Theo mặc định, ở chế độ cảm ứng, không có lựa chọn và tiêu điểm. Bạn có thể xem here để biết thêm thông tin về chủ đề này.

+2

bah android madness – max4ever

84

đối tượng ListView Giả sử là lv, làm following-

lv.setClickable(true); 
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { 

    Object o = lv.getItemAtPosition(position); 
    /* write you handling code like... 
    String st = "sdcard/"; 
    File f = new File(st+o.toString()); 
    // do whatever u want to do with 'f' File object 
    */ 
    } 
}); 
+1

'lv' không thể truy cập bên trong' onItemClick'. Một cách hay để vượt qua điều đó là gì? – shinjin

+1

@shinjin Làm cho nó cuối cùng. 'cuối cùng ListView lv = (ListView) findViewById (R.id.your_list_view);' – Lekensteyn

+0

Cách làm sạch: 'Object o = ((ListView) arg0) .getItemAtPosition (vị trí);' – JimmyB

5

Bạn phải sử dụng setOnItemClickListener ai đó nói.
Mã nên được như thế này:

listView.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     // When clicked, show a toast with the TextView text or do whatever you need. 
     Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show(); 
    } 
}); 
5

Thứ nhất, lớp phải thực hiện các listenener nhấp chuột:

implements OnItemClickListener 

Sau đó thiết lập một người nghe đến ListView

yourList.setOnItemclickListener(this); 

Và cuối cùng, tạo phương thức clic:

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, 
long id) { 
Toast.makeText(MainActivity.this, "You Clicked at " +countries[+ position], Toast.LENGTH_SHORT).show(); 
} 

bạn có thể xem và tải xuống mã here

6

Giải pháp này thực sự tối giản và không làm hỏng mã của bạn.

Trong số list_item.xml (KHÔNG listView!) Gán thuộc tính android: onClick như thế này:

<RelativeLayout android:onClick="onClickDoSomething"> 

và sau đó trong cuộc gọi hoạt động của bạn phương pháp này:

public void onClickDoSomething(View view) { 
    // the view is the line you have clicked on 
} 
1

Sử dụng setOnItemClickListener() api trong hoạt động của bạn. Sau đây là mẫu.

listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){ 

@Override 
public void onItemClick(AdapterView<> parent, View view, int position, long id) 
{ 
    // your code here. 
} 

}); 
Các vấn đề liên quan