获取新添加项目的视图
问题描述:
我想给用户一个提示,他们可以使用刷卡删除某个项目,所以我试图在新项目上实现部分刷卡。我将使用ItemTouchHelper.startswipe为此,但我需要项目视图持有人。获取新添加项目的视图
我的问题是,当我添加一个项目到我的房车并调用notifyItemInserted()时,我如何获得新添加的项目的视图?我试过每次都会返回null的recyclerView.findViewHolderForAdapterPosition(pos)
。如果有人有任何信息,我会很感激它
答
我曾经做过这样的事情。当我使用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;
}
}
你可以修改它以符合你的情况。