首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用StickyListHeaders的SwipeActionAdapter

使用StickyListHeaders的SwipeActionAdapter
EN

Stack Overflow用户
提问于 2015-08-05 07:25:41
回答 2查看 551关注 0票数 6

我正在尝试将这两个非常棒的Android库结合起来:

https://github.com/emilsjolander/StickyListHeaders

https://github.com/wdullaer/SwipeActionAdapter

我与SwipeActionAdapter的所有者一起工作,他说这是可能的(https://github.com/wdullaer/SwipeActionAdapter/issues/29),但我仍然收到错误:

代码语言:javascript
复制
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)

我用卷帘适配器包装了我的基本适配器。然后我有了另一个适配器(ListStickyAdapter),它扩展了装饰器适配器并实现了粘性适配器。

代码语言:javascript
复制
 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())

我在这里做错了什么?

EN

回答 2

Stack Overflow用户

发布于 2015-08-07 22:36:11

你的猜测似乎是对的,可能就是这句话:

代码语言:javascript
复制
swipeAdapter.setListView(listView.getWrappedList())

您在SwipeActionTouchListener的第419行有一个错误,因为没有找到(向下)视图组:

代码语言:javascript
复制
L419 mDownViewGroup.showBackground...

mDownViewGroup是在向下操作时初始化的子视图:

代码语言:javascript
复制
 ...
 child = mListView.getChildAt(i);
 child.getHitRect(rect);
 if (rect.contains(x, y)) {
     try {
         mDownViewGroup = (SwipeViewGroup) child;
         ...

我不知道您提供的listview.getWrappedList()背后的结构,但我猜swipeaction不喜欢它。如果它不喜欢它,可能是因为包装去掉了子代结构(int childCount = mListView.getChildCount();<-你得到子代计数= 0,mDownViewGroup没有初始化)。尝试理解为什么包装列表删除子结构,您可能会明白发生了什么。

编辑:再搜索一下,似乎并不是因为它没有得到childs,而是因为它得到的不是swipeviewgroup:

代码语言:javascript
复制
java.lang.ClassCastException: se.emilsjolander.stickylistheaders.WrapperView cannot be cast to com.wdullaer.swipeactionadapter.SwipeViewGroup

我设法通过派生并使WrapperView扩展SwipeViewGroup (而不是ViewGroup)来实现它。还必须保护一些触摸式侦听器npe,但这没什么大不了的。但这就是它所需要的全部。

此处提供的工作示例:https://github.com/he667/StickyListSwipe

票数 1
EN

Stack Overflow用户

发布于 2015-08-12 02:12:31

看起来StickyListHeaders使用了一种与SwipeActionAdapter非常相似的方法,因为它包装了底层视图,并可能覆盖一些触摸侦听器来完成它的工作。

Gomoku7是正确的,因为您需要创建一个StickyListHeaders分支才能使其工作。由于库是如何完成的,它们的包装器必须是最后一个,因此它需要知道底层的SwipeViewGroup (通过从该类扩展),就像它需要知道底层视图可以实现Checkable一样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31821017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档