我想在SwipeListView启动时刷Activity
上的第一项,向用户显示SwipeListView
可刷卡。
如何使用此UI元素以编程方式执行此操作?
我试着用
swipeListView.openAnimate(position)
这是在答案中提出的,但由于某些原因,甚至在我用数据项填充适配器之后...当我调试并到达此代码段时,swipeListView没有看到其中的项目,并且使用NullPointerException
失败。
好吧,我意识到适配器中没有项目的原因,因为它尚未在onCreate
中创建,所以我将此代码移动到方法:
public void onWindowFocusChanged(boolean hasFocus){}
我的活动,现在它运行但仍然在SwipeListView
库的以下方法失败:
private void resetCell() {
if (downPosition != ListView.INVALID_POSITION) {
if (swipeCurrentAction == SwipeListView.SWIPE_ACTION_CHOICE) {
backView.setVisibility(View.VISIBLE);
}
frontView.setClickable(opened.get(downPosition));
frontView.setLongClickable(opened.get(downPosition));
frontView = null;
backView = null;
downPosition = ListView.INVALID_POSITION;
}
}
这样做的原因是,当这个方法运行时,frontView
对象永远不会被设置,它们就是null。
要打开你应该使用的项目
swipeListView.openAnimate(position)
关闭项目,你可以使用:
swipeListView.closeAnimate(position);
swipeListView.closeOpenedItems();
以下是工作项目的一些代码:
private BaseSwipeListViewListener albumsLIstener = new BaseSwipeListViewListener() {
@Override
public void onClickFrontView(int position) {
if (albumsListsView.isOpened(position)) {
albumsListsView.closeAnimate(position);
} else albumsListsView.openAnimate(position);
}
@Override
public void onClickBackView(int position) {
if (albumsListsView.isOpened(position)) {
albumsListsView.closeAnimate(position);
} else albumsListsView.openAnimate(position);
}
};
检查源代码!
SwipeListViewTouchListener设置了frontView。 setFrontView()
仅在接触事件时被调用。因此,要么您以某种方式假冒此视图的触摸事件,要么您分叉库并根据您的需要进行更新。
我实际上只是为Showcase的实例重新创建了库中使用过的动画,所以我做的是:
private void generateRevealAnimate(final View view) {
animate(view)
.translationX(-520)
.setDuration(500)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {}
});
}
private void generateCloseAnimate(final View view) {
animate(view)
.translationX(0)
.setDuration(500)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {}
});
}
然后在所需的视图上一个接一个地运行它们:
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run()
{
generateRevealAnimate(firstFrontView);
handler.postDelayed(new Runnable() {
@Override
public void run()
{
generateCloseAnimate(firstFrontView);
}
}, 1400);
}
}, 1400);