2015-08-04 18 views
6

Tôi đang cố gắng để kết hợp hai thư viện Android tuyệt vời:SwipeActionAdapter với StickyListHeaders

https://github.com/emilsjolander/StickyListHeaders

https://github.com/wdullaer/SwipeActionAdapter

Tôi đã làm việc với chủ sở hữu của SwipeActionAdapter người nói nó có thể (https://github.com/wdullaer/SwipeActionAdapter/issues/29) nhưng tôi m vẫn nhận được lỗi:

08-02 11:33:07.364 1655-1655/com.slaptap.tappedin E/InputEventReceiver﹕ Exception dispatching input event. 
08-02 11:33:07.364 1655-1655/com.slaptap.tappedin E/MessageQueue-JNI﹕ Exception in MessageQueue callback: handleReceiveCallback 
08-02 11:33:07.380 1655-1655/com.slaptap.tappedin E/MessageQueue-JNI﹕ java.lang.NullPointerException 
      at com.wdullaer.swipeactionadapter.SwipeActionTouchListener.onTouch(SwipeActionTouchListener.java:419) 
      at android.view.View.dispatchTouchEvent(View.java:7701) 
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2210) 
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1945) 

Tôi có Adapter cơ sở được bọc bởi t ông Swipe Adapter. Sau đó tôi có một adapter (ListStickyAdapter) mở rộng Decorator Adapter và thực hiện Sticky Adapater.

mAdapter = new ListAdapter(getActivity(), data); 
swipeAdapter = new SwipeActionAdapter(mAdapter); 
ListStickyAdapter vbsa = new ListStickyAdapter(swipeAdapter); 
listView.setAdapter(vbsa); 

// is it because of this line? (having to pass the sticky header child list) 
swipeAdapter.setListView(listView.getWrappedList()) 

Tôi đang làm gì sai ở đây?

Trả lời

1

đoán của bạn có vẻ đúng, nó có thể là dòng đó:

swipeAdapter.setListView(listView.getWrappedList()) 

Bạn có một lỗi tại dòng 419 trong SwipeActionTouchListener vì không có (giảm) nhóm nhìn thấy:

L419 mDownViewGroup.showBackground... 

mDownViewGroup là chế độ xem con được khởi chạy khi hành động ngừng hoạt động:

... 
child = mListView.getChildAt(i); 
child.getHitRect(rect); 
if (rect.contains(x, y)) { 
    try { 
     mDownViewGroup = (SwipeViewGroup) child; 
     ... 

Tôi không biết các bước ucture đằng sau listview.getWrappedList() bạn cung cấp nhưng tôi đoán là swipeaction không thích nó. Nếu nó không thích nó, có lẽ vì gói remove cấu trúc con (int childCount = mListView.getChildCount(); < - bạn nhận được childcount = 0, mDownViewGroup không được khởi tạo). Hãy thử hiểu lý do tại sao danh sách gói loại bỏ cấu trúc con và bạn có thể sẽ nhận được những gì đang xảy ra.

Edit: được tìm kiếm nhiều hơn một chút, có vẻ như nó không phải là thực tế rằng nó không có được Childs nhưng vì những gì nó được không swipeviewgroup:

java.lang.ClassCastException: se.emilsjolander.stickylistheaders.WrapperView cannot be cast to com.wdullaer.swipeactionadapter.SwipeViewGroup 

tôi quản lý để làm cho nó hoạt động bằng cách forking và làm WrapperView mở rộng SwipeViewGroup (thay vì ViewGroup). Ngoài ra đã phải bảo vệ một số npe touchlistener nhưng không có vấn đề lớn ở đây. Nhưng đó là tất cả những gì nó đòi hỏi.

dụ làm việc có sẵn ở đây: https://github.com/he667/StickyListSwipe

+0

xin cảm ơn vì những suy nghĩ .. vấn đề là Bộ điều hợp vuốt chỉ có "chế độ xem danh sách" thông thường, trong khi "chế độ xem danh sách tiêu đề dính" là đối tượng riêng .. bất kỳ ý tưởng nào về tùy chọn thay thế trong khi vẫn sử dụng ? – aherrick

+0

Hi @ Gomoku7 - là tệp WrapperView.java duy nhất mà bạn phải sửa đổi? Tôi đã thực hiện các WrapperView mở rộng SwipeViewGroup mà bây giờ là ném nhiều lỗi hơn trên dự án.Bạn có thể cung cấp ngã ba của bạn? – aherrick

+1

Có chắc Ive đã thêm ví dụ làm việc của tôi tại địa điểm này: https://github.com/he667/StickyListSwipe – Gomoku7

1

Dường như StickyListHeaders đang sử dụng một cách tiếp cận rất giống với SwipeActionAdapter ở chỗ nó kết thúc tốt đẹp các quan điểm cơ bản và có lẽ ghi đè một số touchlisteners để làm điều đó là công việc.

Gomoku7 là chính xác trong đó bạn sẽ cần phải tạo một ngã ba của StickyListHeaders để làm cho nó hoạt động. Wrapper của họ phải là cuối cùng do làm thế nào thư viện được thực hiện và do đó nó cần phải được nhận thức của bên dưới SwipeViewGroup (bằng cách mở rộng từ lớp đó), giống như nó cần phải nhận thức được thực tế là View cơ bản có thể thực hiện Checkable .

+1

Xin cảm ơn vì những suy nghĩ. Vì vậy, chia hai và đưa thư viện tại địa phương vào dự án của tôi. Tôi chỉ không chắc chắn chính xác những điểm cần thay đổi sau khi mở rộng SwipeViewGroup – aherrick

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