2015-08-04 29 views
6

che sto cercando di combinare questi due impressionanti librerie Android:SwipeActionAdapter con StickyListHeaders

https://github.com/emilsjolander/StickyListHeaders

https://github.com/wdullaer/SwipeActionAdapter

con cui ho lavorato con il proprietario della SwipeActionAdapter chi dice che è possibile (https://github.com/wdullaer/SwipeActionAdapter/issues/29) ma io' m ancora ricevendo errori:

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) 

Ho il mio adattatore base avvolto da t lui Swipe Adapter. Poi ho un altro adattatore (ListStickyAdapter) che estende Decorator Adapter e implementa 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()) 

Cosa sto facendo di sbagliato qui?

risposta

1

vostra congettura sembra corretto, è probabilmente quella linea:

swipeAdapter.setListView(listView.getWrappedList()) 

Hai un errore alla riga 419 in SwipeActionTouchListener perché non c'è (verso il basso) gruppo PRESENTI:

L419 mDownViewGroup.showBackground... 

mDownViewGroup è una vista figlio inizializzata su azione in basso:

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

Non so lo str struttura dietro listview.getWrappedList() fornite ma la mia ipotesi è che a swipeaction non piaccia. Se non gli piace, è probabilmente perché il wrapping rimuove la struttura figli (int childCount = mListView.getChildCount(); < - ottieni childcount = 0, mDownViewGroup non è inizializzato). Prova a capire perché l'elenco compresso rimuove la struttura figlio e probabilmente otterrai ciò che sta accadendo.

Edit: Cercato un po 'di più, a quanto pare non è il fatto che esso non ottiene i bambino, ma perché ciò che si ottiene non sono swipeviewgroup:

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

sono riuscito a farlo funzionare con un fork e facendo WrapperView estende SwipeViewGroup (invece di ViewGroup). Doveva anche proteggere alcuni touchlistener npe ma non un grosso problema qui. Ma questo è tutto ciò che richiede.

esempio di lavoro disponibile qui: https://github.com/he667/StickyListSwipe

+0

ehi grazie per i pensieri .. il problema è che lo Swipe Adapter prende solo una normale "lista", mentre la "vista dell'elenco di intestazioni" è il proprio oggetto .. qualsiasi idea su un'opzione alternativa mentre la si usa ancora ? – aherrick

+0

Ciao @ Gomoku7 - WrapperView.java era l'unico file che dovevi modificare? Ho fatto in modo che WrapperView estenda SwipeViewGroup che ora genera più errori nel progetto.Puoi fornire la tua forchetta? – aherrick

+1

Sì, certo che Ive ha aggiunto il mio esempio di lavoro in questa posizione: https://github.com/he667/StickyListSwipe – Gomoku7

1

Sembra StickyListHeaders sta usando un approccio molto simile a SwipeActionAdapter nel senso che avvolge i punti di vista sottostanti e, probabilmente, sovrascrive alcuni touchlisteners di fare il suo lavoro.

Gomoku7 è corretto in quanto è necessario creare un fork di StickyListHeaders per farlo funzionare. Il loro wrapper deve essere l'ultimo a causa del modo in cui la libreria è fatta e quindi deve essere a conoscenza dello SwipeViewGroup sottostante (estendendosi da quella classe), proprio come deve essere consapevole del fatto che la Vista sottostante potrebbe implementare Checkable .

+1

Hey, grazie per i pensieri. Quindi ho biforcato e portato la biblioteca localmente nel mio progetto. Non sono proprio sicuro di quali siano i punti da cambiare dopo l'estensione di SwipeViewGroup – aherrick