Cách xử lý nhấp ListView trong Android


141

Làm cách nào để tôi nghe nhấp vào sự kiện trên ListView?

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

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

Khi tôi làm 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) {  

   }  
});  

Điều đó 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ã đó sống trong một lớp mở rộng Hoạt động.

Câu trả lời:


182

Trên danh sách của bạn, sử dụng setOnItemClickListener


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

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

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

Đầu tiên, lớp phải thực hiện trình nghe nhấp chuột: thực hiện OnItemClickListener Sau đó đặt trình lắng nghe cho ListView yourList.setOnItemclickListener (this); Và cuối cùng, tạo phương thức clic: @Override void công khai trênItemClick (AdapterView <?> Cha mẹ, Chế độ xem, vị trí int, id dài) {Toast.makeText (MainActivity.this, "Bạn đã nhấp vào" + country [+ vị trí], Bánh mì nướng.LENGTH_SHORT) .show (); }
quản trị trang web bourax

88

Giả sử đối tượng ListView là lv, hãy làm như sau-

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
lvkhông thể truy cập bên trong onItemClick. Một cách tốt đẹp để có được xung quanh đó là gì?
shinjin

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

Cách sạch sẽ:Object o = ((ListView)arg0).getItemAtPosition(position);
JimmyB

Đây là liên kết đến tài liệu: developer.android.com/reference/android/widget/,
trinity420

42

Bạn cần đặt chế độ xem tăng "Có thể nhấp" và "có thể nghe các sự kiện nhấp" trong phương thức getView () của lớp bộ điều hợp.

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

và khai báo trình nghe nhấp 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 chỉ đúng khi bạn tùy chỉnh Bộ điều hợp bằng cách mở rộng BaseAd CHƯƠNG.

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


cảm ơn Vijay tôi đã phải đối mặt với vấn đề nhấp chuột trên quan điểm lạm phát tôi đã giải quyết từ câu trả lời của bạn
dhaiwat

Nhưng điều này không xác định mục nào đang được nhấp, điều này làm cho nó ít nhiều vô dụng cho danh sách? Chính xác?
trang trại đà điểu

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

Tôi đã tìm thấy một giải pháp thanh lịch hơn một thẻ trong bộ điều hợp của bạn lưu trữ tham chiếu setOnClickListener và gọi nó theo phương thức onClick (Xem v). sau đó các hoạt động có thể nhận được sự kiện với vị trí.
jocelyn

Phương pháp onClick của bạn là sai. Nó phải là onItemClick (AdapterView <?> Cha mẹ, Chế độ xem, vị trí int, id dài)
IgorGanapolsky

17

Hai câu trả lời trước của tôi là chính xác - bạn có thể sử dụng OnItemClickListener.

Thật tốt khi lưu ý rằng sự khác biệt giữa OnItemClickListenerOnItemSelectedListener, trong khi nghe có vẻ tinh tế, trên thực tế rất có ý nghĩa, vì lựa chọn vật phẩm và tiêu điểm có liên quan đến chế độ cảm ứng của bạn AdapterView.

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


8

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

Trong list_item.xml của bạn (KHÔNG phải listView!) Gán thuộc tính android: onClick như thế này:

<RelativeLayout android:onClick="onClickDoSomething">

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

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

Giải pháp tốt nhưng, không có cách nào để có được vị trí của mục được nhấp
Bilal Şimşek

@ BilalŞimşek Trong một thời gian dài tôi đã rời khỏi Android nhưng nếu viewcó thể có một số siêu dữ liệu, đó có thể là cách để có được vị trí.
Amio.io

6

Bạn phải sử dụng setOnItemClickListenermột người nói.
Mã phải 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

Đầu tiên, lớp phải thực hiện trình nghe nhấp chuột:

implements OnItemClickListener

Sau đó đặt một trình nghe cho 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 mã ở đây


3

Sử dụng api setOnItemClickListener () 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.
}

});

1

Trong Kotlin, thêm một trình nghe vào listView của bạn đơn giản như java

your_listview.setOnItemClickListener { parent, view, position, id ->   

    Toast.makeText(this, position, Toast.LENGTH_SHORT).show()

 }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.