Android-SwipeListView中的一个错误

时间:2014-04-09 09:44:27

标签: android listview swipe

最近我使用的是Android-SwipeListView库,这是一个很棒的工作。 直截了当,我的要求是,当我向左滑动一个项目时,其他项目必须关闭。然后,当我向左打开第一个项目后,我又开始非常慢地滑动第二个项目,同时我的手指仍然触摸屏幕。在Opening(BaseSwipeListView中的onStartOpen())开始时,打开的项很快就关闭了。在打开的时候开始关闭,我停止了移动我的手指。结果,第二个项目停在那里。结果如下: The first item is open normally

When the second started to move, stop moving finger

When started swiping again when the third started to move, stop moving finger

同时,我的布局是:

<com.fortysevendeg.swipelistview.SwipeListView
    android:id="@+id/album_detail_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@id/album_description_parent"
    android:layout_centerHorizontal="true"
    android:layout_margin="2dp"
    android:background="#ffffff"
    android:cacheColorHint="#000000"
    android:divider="@drawable/divider_bg"
    android:dividerHeight="2dp"
    android:drawingCacheQuality="auto"
    android:footerDividersEnabled="false"
    android:gravity="top|center_horizontal"
    android:headerDividersEnabled="false"
    app:swipeActionLeft="reveal"
    swipe:swipeBackView="@+id/detail_item_back"
    swipe:swipeCloseAllItemsWhenMoveList="true"
    swipe:swipeDrawableChecked="@drawable/choice_selected"
    swipe:swipeDrawableUnchecked="@drawable/choice_unselected"
    swipe:swipeFrontView="@+id/detail_item_front"
    swipe:swipeMode="left"
    swipe:swipeOpenOnLongPress="false" />

我的Java代码是:

albumContentSLV
            .setSwipeListViewListener(new BaseSwipeListViewListener() {
                @Override
                public void onStartOpen(int position, int action,
                        boolean right) {
                    // TODO Auto-generated method stub
                    albumContentSLV.closeOpenedItems();
                    super.onStartOpen(position, action, right);
                }
            });

是的,SwipeListView可以通过closeOpenedItems()关闭所有打开的项目。但是当有半开项目时,SwipeListView如何处理这个?这是SwipeListView中的错误吗?

2 个答案:

答案 0 :(得分:2)

是的,确实是一个错误。听众只听取行动开启或关闭包含开放,开放打开,关闭开始和关闭打开。但是在滑动过程中,除了onMove,我们什么也做不了,我们可以得到x和y。真可惜!

加法:

最终,我找到了这个bug的解决方案。我修改了名为closeAnimate的函数的实现。它位于第349行。修改后的closeAnimate(int)在这里:

protected void closeAnimate(int position) {
    View view = swipeListView.getChildAt(position - swipeListView.getFirstVisiblePosition());
    if (view != null) {
        closeAnimate(view.findViewById(swipeFrontView), position);
    }
}

所以,它终于得到了解决。在垂直快速滚动期间,崩溃不会再次发生。

PS:在openAnimate(int)中发生了同样的问题,并且修改了openAnimate(int):

protected void openAnimate(int position) {
    final View child = swipeListView.getChildAt(position - swipeListView.getFirstVisiblePosition()).findViewById(swipeFrontView);
    if (child != null) {
        openAnimate(child, position);
    }
}

答案 1 :(得分:1)

我使用了Android-SwipeListView的这个小部件库。我在Github上分叉了这个库。我有一个关于这个库的问题的解决方案。这是我的project which I had fixed this bug,请查看,并深入了解它。

我修改了closeAnimate的实现。它在第349行。修改后的closeAnimate(int)是这样的:

protected void closeAnimate(int position) {
    View view = swipeListView.getChildAt(position - swipeListView.getFirstVisiblePosition());
    if (view != null) {
        closeAnimate(view.findViewById(swipeFrontView), position);
    }
}

然后,在垂直快速滚动期间不会再发生崩溃。

与此同时,同样的问题发生在openAnimate(int)openAnimate(int)修改后就是这样:

protected void openAnimate(int position) {
    final View child = swipeListView.getChildAt(position - swipeListView.getFirstVisiblePosition()).findViewById(swipeFrontView);
    if (child != null) {
        openAnimate(child, position);
    }
}