2012-03-30 32 views
11

Tôi đã tạo một ExpandableListView với sự trợ giúp của hướng dẫn này: link. Tôi hiểu mã nhiều hơn hoặc ít hơn và đang cố gắng đặt một người đăng ký dài trên các nhóm.Android LongClickListener trên các mục nhóm ExpandableListView

Có một setOnChildClickListener vào các mục con đã và tôi cố gắng thiết lập một longclicklistener trên chúng:

exList.setOnItemLongClickListener(new OnItemLongClickListener() { 
     @Override 
     public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 
      if (ExpandableListView.getPackedPositionType(id) == ExpandableListView.PACKED_POSITION_TYPE_CHILD) { 
       groupPosition = ExpandableListView.getPackedPositionGroup(id); 
       childPosition = ExpandableListView.getPackedPositionChild(id); 
//[....] 
return false; 
     } 
    }); 

Làm thế nào tôi có thể thiết lập một longclicklistener vào các mục nhóm?

Tôi biết mã khó đọc nên tôi đã tạo một dự án mẫu và tải nó lên here. Điều này không có onlongclicklistener trên trẻ em, vì điều này gần như là bản gốc từ liên kết ở trên. Tôi sẽ đánh giá cao nếu ai đó có thể giúp tôi với điều này.

Trả lời

41

Các mục nhóm là một tập hợp con của tất cả các mục, vì vậy phương thức trên phải được gọi trong cả hai trường hợp. Sau đó bạn sẽ sử dụng getPackedPositionType như trên để tìm ra nếu mục được chọn là một nhóm, một mục hoặc null.

Mã này sẽ là:

exList.setOnItemLongClickListener(new OnItemLongClickListener() { 
     @Override 
     public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 
      int itemType = ExpandableListView.getPackedPositionType(id); 

      if (itemType == ExpandableListView.PACKED_POSITION_TYPE_CHILD) { 
       childPosition = ExpandableListView.getPackedPositionChild(id); 
       groupPosition = ExpandableListView.getPackedPositionGroup(id); 

       //do your per-item callback here 
       return retVal; //true if we consumed the click, false if not 

      } else if(itemType == ExpandableListView.PACKED_POSITION_TYPE_GROUP) { 
       groupPosition = ExpandableListView.getPackedPositionGroup(id); 
       //do your per-group callback here 
       return retVal; //true if we consumed the click, false if not 

      } else { 
       // null item; we don't consume the click 
       return false; 
      } 
    }); 

Nếu đó là một nhóm, bạn sẽ sử dụng getPackedPositionGroup như trên để có được ID nhóm đang được dài ép. Nếu đó là một mục, bạn sẽ sử dụng kết hợp của getPackedPositionGroup và getPackedPositionChild.

+0

Wow. Điều này thật dễ dàng. Cảm ơn nhiều! – erdomester

+1

Bạn được chào đón! Nếu nó hoạt động, đừng quên chấp nhận/upvote/etc. :) –

+0

Wow .... Điều này thường thực hiện nhưng hoàn toàn làm việc tốt với các sự kiện nhóm và con của truy cập dữ liệu nó cho vị trí. –

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