我想在Activity
启动时SwipeListView上滑动第一项,向用户显示SwipeListView
可以刷卡。
如何使用此UI元素以编程方式执行此操作?
我尝试使用
swipeListView.openAnimate(position)
这是在答案中提出的,但由于某种原因,甚至在我用数据项填充适配器之后...当我调试并到达此代码段时,swipeListView没有看到其中的项,并且失败了{ {1}}。
嗯,我意识到适配器中没有项目的原因是因为它尚未在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;
}
}
对象永远不会被设置,而它会为空。
答案 0 :(得分:1)
要打开项目,您应该使用
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);
}
};
答案 1 :(得分:1)
检查源代码!
SwipeListViewTouchListener设置了frontView。只有在触碰事件时才会调用setFrontView()
。所以要么你以某种方式伪造这个视图的触摸事件,要么你分叉库并根据你的需要更新它。
答案 2 :(得分:1)
我实际上只是为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);