Android - 在notifyItemRemoved之后的RecyclerView动画notifyItemChanged

时间:2016-01-05 15:36:28

标签: android android-animation android-recyclerview

我的RecyclerView defaultItemAnimator存在问题。当我使用notifyItemRemoved()删除我的一个项目时,我还在另一个特定索引上调用notifyItemChanged()来更改其中的文本。在删除动画期间,我调用notifyItemChanged()的项目会更改其文本,但会执行一些看起来像疮拇指的傻视动画。 (它立即移动到新位置,而其余部分顺利移动到新位置)

有没有办法在notifyItemRemoved()完成时收到通知,以便我可以调用notifyItemChanged()?

1 个答案:

答案 0 :(得分:1)

可能的解决方案是设置处理程序。 获取notifyItemRemoved()和notifyItemChanged()的Animation类的源代码。方法内部应该是以下几行:

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {


    for touch: AnyObject! in touches {
        let touchLocation = touch.locationInNode(self)
        let touchedNode = self.nodeAtPoint(touchLocation)
        let name = touchedNode.name

            if name == "Button0"
            {
                userSequence.append(Button0.value)
                print("Button0 pressed")
            }
            if name == "Button1"
            {
                userSequence.append(Button1.getValue())
                print("Button1 pressed")
            }
            if name == "Button2"
            {
                userSequence.append(Button2.value)
            }
            if name == "Button3"
            {
                userSequence.append(Button3.value)
            }
            if name == "Button4"
            {
                userSequence.append(Button4.value)
            }
            if name == "Button5"
            {
                userSequence.append(Button5.value)
            }
            if name == "Button6"
            {
                userSequence.append(Button6.value)
            }
            if name == "Button7"
            {
                userSequence.append(Button7.value)
            }
            if name == "Button8"
            {
                userSequence.append(Button8.value)
            }
            if name == "Button9"
            {
                userSequence.append(Button9.value)
            }
            if name == "ButtonEnter"
            {
                compareSequences()
            }
    }


}

在animateRemoveImpl()Methode中。

转到

的声明
 animation.setDuration(getRemoveDuration())
            .alpha(0).setListener(new VpaListenerAdapter() {
        @Override
        public void onAnimationStart(View view) {
            dispatchRemoveStarting(holder);
        }

获得价值。 使用getRemoveDuration()的postDelay设置处理程序内的notifyItemChange()。 处理程序可能看起来像:

getRemoveDuration()