我的RecyclerView defaultItemAnimator存在问题。当我使用notifyItemRemoved()删除我的一个项目时,我还在另一个特定索引上调用notifyItemChanged()来更改其中的文本。在删除动画期间,我调用notifyItemChanged()的项目会更改其文本,但会执行一些看起来像疮拇指的傻视动画。 (它立即移动到新位置,而其余部分顺利移动到新位置)
有没有办法在notifyItemRemoved()完成时收到通知,以便我可以调用notifyItemChanged()?
答案 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()