2015-07-05 14 views
8

Tôi có dưới mã:Đặt nghe bấm dài cho listview

public class MainActivity extends ListActivity { 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 
protected void onListItemClick(ListView l, View v, final int position, long id) { 
    super.onListItemClick(l, v, position, id); 
}} 

tôi cần phải thay đổi điều này để onListItemLongClick() nhưng làm thế nào? Có thể không?

+0

Bạn có thể thử giải thích những gì bạn muốn làm theo một cách khác, với chi tiết hơn không? Mã ví dụ của bạn dường như không thực hiện bất cứ điều gì, vì vậy rất khó đoán ... –

+0

Tôi cần một hàm khi tôi bấm vào thời gian dài (như 2 giây) trên một mục trong listview thì các mã khác của tôi trong hàm thực hiện. – Matarata

+1

bạn đã thử http://stackoverflow.com/questions/8846707/how-to-implement-a-long-click-listener-on-a-listview chưa? –

Trả lời

5

Câu hỏi của bạn rất giống với this one, nhưng có vẻ như đây không phải là bản sao chính xác.

Điều bạn đã nhận thấy là lớp ListActivity không có ghi đè phương pháp cụ thể cho trường hợp này.

Để thêm chức năng này như một override phương pháp, lớp học của bạn nên thực hiện các giao diện AdapterView.OnItemLongClickListener, và sau đó bạn có thể thêm các ghi đè onItemLongClick() phương pháp, có tác dụng giống như ghi đè onListItemClick() phương pháp bạn đã có, nhưng phản ứng với nhấp chuột dài .

Chỉ cần chắc chắn rằng bạn làm theo hướng dẫn từ this answer, bạn phải sử dụng android:longClickable="true" trong xml bố trí, hoặc gọi listview.setLongClickable(true);

Ví dụ:

public class MainActivity extends ListActivity implements AdapterView.OnItemLongClickListener { 

    ListView listview; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     ListView listview = (ListView) findViewById(R.id.list); 

     listview.setLongClickable(true); 

    } 

    @Override 
    public boolean onItemLongClick(AdapterView<?> l, View v, 
            final int position, long id) { 

     Toast.makeText(this, "long clicked pos: " + position, Toast.LENGTH_LONG).show(); 

     return true; 
    } 

    protected void onListItemClick(ListView l, View v, final int position, long id) { 
     super.onListItemClick(l, v, position, id); 

     Toast.makeText(this, "short clicked pos: " + position, Toast.LENGTH_LONG).show(); 

    } 

//.................... 
+0

Rất đẹp nó hoạt động. ví dụ của bạn rất tốt.tnx – Matarata

2

thử này

listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 

     public boolean onItemLongClick(AdapterView<?> arg0, View v, 
       int index, long arg3) { 

      // write your code 

      return false; 
     }}); 
1

Bạn có thể thực hiện người nghe, sau đó gọi lại sẽ xuất hiện như một hàm (phương pháp) trong lớp học của bạn:

public class MainActivity extends ListActivity implements View.OnLongClickListener { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     View listView = findViewById(R.id.list_view); 
     listView.setOnLongClickListener(this); 
    } 

    @Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
     super.onListItemClick(l, v, position, id); 
    } 

    @Override 
    public boolean onLongClick(View v) { 
     // Do your work here 
     return false; 
    } 

} 
0

có nó là tốt và khá dễ dàng để đạt được chỉ đơn giản là bạn phải tạo bản sao của listview như

ListView lv = (ListView)findViewById(R.id.listview); 
lv.setOnLongClickListener(new View.OnLongClickListener() { 
       @Override 
       public boolean onLongClick(View 

        return true; 
       } 

     });) 

in trường hợp của bạn thay vì mở rộng ListActivity, bạn có thể tạo một khung nhìn danh sách trong xml và tìm khung nhìn trong MainActivity và làm theo bước trên.

2

bạn chỉ có thể làm điều đó với setOnItemLongClickListener

listview.setOnItemLongClickListener(new OnItemLongClickListener() { 
     @Override 
     public boolean onItemLongClick(AdapterView<?> arg0, View arg1, 
       int arg2, long arg3) { 
      Toast.makeText(ClassName.class, "Long Clicked Trigger: ", Toast.LENGTH_LONG).show(); 
      return true; 
     } 
}); 
Các vấn đề liên quan