最近我在使用android swipelistview库,这是一个很棒的工作。
直截了当地说,我的要求是,当我向左滑动一个项目时,其他项目必须关闭。然后,当我打开左边的第一个项目,再次,我开始刷第二个项目左非常慢的同时,我的手指仍然触摸屏幕。在开始打开时(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里的虫子吗?
最佳答案
我使用了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);
}
}