最近我使用的是Android-SwipeListView库,这是一个很棒的工作。 直截了当,我的要求是,当我向左滑动一个项目时,其他项目必须关闭。然后,当我向左打开第一个项目后,我又开始非常慢地滑动第二个项目,同时我的手指仍然触摸屏幕。在Opening(BaseSwipeListView中的onStartOpen())开始时,打开的项很快就关闭了。在打开的时候开始关闭,我停止了移动我的手指。结果,第二个项目停在那里。结果如下:
同时,我的布局是:
<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中的错误吗?
答案 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);
}
}