SwipeListView by 47degree:以编程方式滑动第一个项目

问题描述 投票:3回答:3

我想在SwipeListView启动时刷Activity上的第一项,向用户显示SwipeListView可刷卡。

如何使用此UI元素以编程方式执行此操作?

更新

我试着用

swipeListView.openAnimate(position)

这是在答案中提出的,但由于某些原因,甚至在我用数据项填充适配器之后...当我调试并到达此代码段时,swipeListView没有看到其中的项目,并且使用NullPointerException失败。

更新2

好吧,我意识到适配器中没有项目的原因,因为它尚未在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。

android listview swipe
3个回答
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
投票

检查源代码!

SwipeListViewTouchListener设置了frontView。 setFrontView()仅在接触事件时被调用。因此,要么您以某种方式假冒此视图的触摸事件,要么您分叉库并根据您的需要进行更新。


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);                 
© www.soinside.com 2019 - 2024. All rights reserved.