gpt4 book ai didi

android - RecyclerView ItemAnimator animateAdd & animateChange 同时进行?

转载 作者:行者123 更新时间:2023-11-30 01:17:16 25 4
gpt4 key购买 nike

我正在尝试做这个动画:

enter image description here

插入一个新项目,其他人会像默认情况下那样向下移动。但是第一项和第二项发生了变化。第一个插入 ViewType 1,然后第二个将 ViewType 切换为 2。我目前管理 3 种 View 类型(adaptadorNotificaciones.java)。

1 全尺寸。 notificacion_item1.xml

2 填充。 notificacion_item2.xml

3 分隔符。 section.xml

我从 DefaultItemAnimator 扩展如下(animadroNotificaciones):

public class animadroNotificaciones extends DefaultItemAnimator {

@Override
public boolean animateAdd(RecyclerView.ViewHolder holder){
return true;
}

public boolean animateChange(RecyclerView.ViewHolder oldHolder, RecyclerView.ViewHolder newHolder, int fromX, int fromY, int toX, int toY){
return super.animateChange(oldHolder,newHolder,fromX,fromY,toX,toY);
}

@Override
public void onAnimationFinished(RecyclerView.ViewHolder holder){
super.onAnimationFinished(holder);
}


@Override
public boolean animateMove(RecyclerView.ViewHolder holder, int fromX, int fromY, int toX, int toY){
return super.animateMove(holder,fromX,fromY,toX,toY);
}}

我也把它想象成一个堆栈:

LinearLayoutManager llm = new LinearLayoutManager(this);
llm.setOrientation(LinearLayoutManager.VERTICAL);
llm.setReverseLayout(true);
llm.setStackFromEnd(true);
recyclerView.setLayoutManager(llm);

所以当我添加一个项目时,滚动条必须向上移动:

recyclerView.scrollToPosition(arreglo.size()-1);

插入项目的完整代码 ( adaptadorNotificaciones.java ):

public void addNotificacion(ItemLista notificacion,RecyclerView recyclerView){
String mesAnterior = "";
String mesInsertado = "";

if(arreglo.size()!=0)
mesAnterior = ManejadorFechas.getFecha(arreglo.get(arreglo.size()-1).getTiempo(),false);
mesInsertado = ManejadorFechas.getFecha(notificacion.getTiempo(),false);

if(!mesInsertado.equals(mesAnterior) && arreglo.size()!=0){

arreglo.get(arreglo.size()-1).setTipo(2);
arreglo.add(new ItemLista(3,mesAnterior));
arreglo.add(notificacion);

notifyItemRangeChanged(arreglo.size()-3,arreglo.size()-1);
recyclerView.scrollToPosition(arreglo.size()-1);

}else if(arreglo.size()!=0){
arreglo.get(arreglo.size()-1).setTipo(2);
arreglo.add(notificacion);
notifyItemRangeChanged(arreglo.size()-2,arreglo.size()-1);
recyclerView.scrollToPosition(arreglo.size()-1);
}else{
arreglo.add(notificacion);
notifyItemInserted(arreglo.size()-1);
recyclerView.scrollToPosition(arreglo.size()-1);
}
}

但是上面的代码给了我下一个结果:

enter image description here

我认为这是由以下行引起的:

notifyItemRangeChanged(arreglo.size()-3,arreglo.size()-1);

有人知道如何解决这个问题吗?提前致谢。

最佳答案

我是这样解决的:

rv.setItemAnimator(new animadroNotificaciones(){
@Override
public void onAnimationFinished(RecyclerView.ViewHolder viewHolder) {
adaptador.notifyDataSetChanged();
}
});

关于android - RecyclerView ItemAnimator animateAdd & animateChange 同时进行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37663740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com