2011-07-18 22 views
34

Tôi đang làm việc với một ListFragment và làm một onListItemClick. Tất cả mọi thứ hoạt động tốt, nhưng bây giờ tôi muốn sử dụng một chặng đường dài hàng Click (ví dụ setOnItemLongClickListener (OnItemLongClickListener mới() cho một hoạt động). Làm thế nào tôi có thể sử dụng trong đoạn tôi?Dài bấm vào ListFragment

Cảm ơn!

+3

Tôi đã tìm ra cách: getListView setOnItemLongClickListener(). (OnItemLongClickListener mới() { \t \t \t @ Override \t \t \t public boolean onItemLongClick (AdapterView paramAdapterView, \t \t \t Xem paramView, vị trí int, long paramLong) {// TODO trả về true; } }); – tsync

Trả lời

58

Có, giải pháp . posted by tsync làm việc cho tôi! tôi cũng đã chạy vào cùng một vấn đề và cho rằng điều này không thể tôi đã cố gắng đề nghị trên như sau:.

public class ProjectsFragment extends ListFragment { 

@Override 
public void onActivityCreated(Bundle savedState) { 
    super.onActivityCreated(savedState); 

    getListView().setOnItemLongClickListener(new OnItemLongClickListener() { 

     @Override 
     public boolean onItemLongClick(AdapterView<?> arg0, View arg1, 
       int arg2, long arg3) { 
      Toast.makeText(getActivity(), "On long click listener", Toast.LENGTH_LONG).show(); 
      return true; 
     } 
    }); 

và nó làm việc

+0

và nó cũng làm việc cho tôi. – danny117

+1

có vấn đề gì nếu chúng ta trả về đúng hay sai? @Narayanan – Manny265

+1

@ Manny265 trả về false sẽ chạy trình nghe onclick, trả về true ngăn chặn điều này –

11

này làm việc cho tôi

!
getListView().setOnItemLongClickListener(new OnItemLongClickListener() { 
    public boolean onItemLongClick(AdapterView<?> av, View v, int position, long id) { 
     //Get your item here with the position     
     return true; 
    } 
}); 
+0

đây là câu trả lời tốt hơn – danny117

+3

Mã này cần phải truy cập vào 'onViewCreated' trong Fragment – Flexicoder

13

Tùy thuộc vào những gì bạn muốn nhận ra bạn có thể sử dụng phương pháp đưa ra cho menues bối cảnh:

Đầu tiên đăng ký lớp View mà được lâu ép (bên trong lớp Fragment của bạn):

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 

    registerForContextMenu(this.getListView()); 
} 

Hơn cả việc triển khai hai phương thức này, để tạo menu ngữ cảnh và thực hiện những gì bạn muốn khi một mục menu được nhấp:

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 

    MenuInflater inflater = this.getActivity().getMenuInflater(); 
    inflater.inflate(R.menu.my_context_menu, menu); 
} 

@Override 
public boolean onContextItemSelected(MenuItem item) { 

    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); 
    switch (item.getItemId()) { 

     case R.id.add: // <-- your custom menu item id here 
      // do something here 
      return true; 

     default: 
      return super.onContextItemSelected(item); 
    } 
} 
+4

Tốt đẹp! Chỉ muốn thêm rằng bạn không thể kết hợp registerForContextMenu với setOnItemLongClickListener. Có thể rõ ràng với một số người, nhưng không phải cho tôi. Ngoài ra nó là tốt để biết rằng id hàng có thể được lấy từ info.id – Toydor

+0

Hôm nay lần đầu tiên tôi đã upped mọi câu trả lời bởi vì đây là những gì tôi sẽ làm gì với sự kiện longclick. – danny117

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