2015-08-04 3 views
6

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

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) 

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

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

ответ

1

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

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; 
     ... 

Я не знаю, как s создайте структуру listview.getWrappedList(), которую вы предоставляете, но я предполагаю, что swipeaction ему не нравится. Если это не нравится, вероятно, из-за того, что упаковка удаляет дочернюю структуру (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

+0

привет спасибо за мысли .. проблема заключается в том, что Swipe Adapter принимает только обычный «просмотр списка», в то время как «липкое представление списка заголовков» - это собственный объект. Любая идея альтернативного варианта при его использовании ? – aherrick

+0

Привет @ Gomoku7 - был ли WrapperView.java единственным файлом, который вам пришлось изменить? Я сделал WrapperView расширением SwipeViewGroup, который теперь бросает больше ошибок в проект.Можете ли вы предоставить свою вилку? – aherrick

+1

Да, конечно, Ive добавил мой рабочий пример в этом месте: https://github.com/he667/StickyListSwipe – Gomoku7

1

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

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

+1

Эй, спасибо за мысли. Так что разветвлено и принесло библиотеку локально в мой проект. Я просто не уверен, какие именно пункты нужно изменить после расширения SwipeViewGroup – aherrick