获取新添加项目的查看者

时间:2016-12-01 15:47:23

标签: android android-recyclerview adapter android-viewholder

我想给用户一个提示,他们可以使用滑动来删除某个项目,所以我正在尝试对新项目实施部分滑动。我将使用ItemTouchHelper.startswipe,但是我需要项目视图持有者。

我的问题是,当我将一个项目添加到我的RV并调用notifyItemInserted()时,如何获取新添加项目的视图?我试过recyclerView.findViewHolderForAdapterPosition(pos),每次都返回null。如果有人有任何信息,我会很感激

1 个答案:

答案 0 :(得分:0)

我做过这样的事情。当我使用ItemTouchHelper设置滑动时,我用简单的动画实现了动画。这就是我做到的。动画:

private void setupAnimation() {
    swipeAnimation = new Animation() {
        @Override
        protected void applyTransformation(float interpolatedTime, Transformation t) {
            int direction = animationRepeatTime < 2 ? 1 : -1;
            if (animatingView != null) {
                animatingView.setTranslationX(direction * interpolatedTime * Utils.convertDpToPixel(100, context));
            } else {
                swipeAnimation.cancel();
            }
        }
    };
    swipeAnimation.setInterpolator(new OvershootInterpolator());
    swipeAnimation.setRepeatMode(Animation.REVERSE);
    swipeAnimation.setRepeatCount(3);
    swipeAnimation.setAnimationListener(new Animation.AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {

        }

        @Override
        public void onAnimationEnd(Animation animation) {

        }

        @Override
        public void onAnimationRepeat(Animation animation) {
            animationRepeatTime++;
        }
    });
    swipeAnimation.setStartOffset(600);
    swipeAnimation.setFillAfter(false);
    swipeAnimation.setDuration(500);
}

在onBindViewHolder中,当触摸项目时停止动画:

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    if (holder instanceof ActivityStreamViewHolder) {
        bindActivityHolder((ActivityStreamViewHolder) holder, position);
        if (position == 1 && shouldAnimate) {
            startAnimation(holder.itemView);
        }
        holder.itemView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    if (swipeAnimation != null && swipeAnimation.hasStarted() && !swipeAnimation.hasEnded()) {
                         shouldAnimate = false;
                        swipeAnimation.cancel();
                        animatingView.clearAnimation();
                        animatingView.setTranslationX(0);
                    }
                }
                return false;
            }
        });
    }

开始动画:

public void startAnimation(View view) {
    animatingView = view;
    if (shouldAnimate && getItemCount() > 1 && animatingView.getAnimation() == null) {
        animatingView.startAnimation(swipeAnimation);
        shouldAnimate = false;
    }
}

您可以修改它以符合您的情况。