SwipeActionAdapter с StickyListHeaders

Я пытаюсь объединить эти две удивительные библиотеки Android:

https://github.com/emilsjolander/StickyListHeaders

https://github.com/wdullaer/SwipeActionAdapter

Я работал с владельцем SwipeActionAdapter, который говорит, что это возможно ( https://github.com/wdullaer/SwipeActionAdapter/issues/29 ), но я все еще получаю ошибки:

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) 

У меня есть базовый адаптер, завернутый адаптером Swipe. Затем у меня есть другой адаптер (ListStickyAdapter), который расширяет адаптер Decorator и реализует 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()) 

Что я здесь делаю неправильно?

Solutions Collecting From Web of "SwipeActionAdapter с StickyListHeaders"

Похоже, что StickyListHeaders использует очень похожий подход к SwipeActionAdapter в том, что он обертывает основные представления и, возможно, перезаписывает некоторые сенсорные исполнители, чтобы сделать это.

Gomoku7 правилен тем, что вам нужно будет создать вилку StickyListHeaders, чтобы она работала. Их оболочка должна быть последней из-за того, как выполняется библиотека, и, следовательно, она должна знать о SwipeViewGroup внизу (путем расширения от этого класса), точно так же, как нужно знать о том, что базовый вид может реализовать Checkable ,

Ваша догадка кажется правильной, вероятно, эта строка:

 swipeAdapter.setListView(listView.getWrappedList()) 

У вас есть ошибка в строке 419 в SwipeActionTouchListener, потому что нет группы поиска (вниз):

 L419 mDownViewGroup.showBackground... 

MDownViewGroup – дочернее представление, инициализированное при действии вниз:

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

Я не знаю структуру, лежащую в списке listview.getWrappedList (), которую вы предоставляете, но я предполагаю, что swipeaction ему не нравится. Если это не нравится, вероятно, потому, что упаковка удаляет структуру children (int childCount = mListView.getChildCount (); <- вы получаете childcount = 0, mDownViewGroup не инициализируется). Попытайтесь понять, почему обернутый список удаляет дочернюю структуру, и вы, вероятно, получите то, что происходит.

Edit: Искали немного больше, кажется, что это не факт, что он не получает детей, а потому, что он получает не swipeviewgroup:

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

Мне удалось заставить его работать путем разметки и создания WrapperView расширяет SwipeViewGroup (вместо ViewGroup). Также нужно было защитить какой-то сенсорный плейер, но здесь не было особого труда. Но это все, что нужно.

Рабочий пример доступен здесь: https://github.com/he667/StickyListSwipe