当前位置: 代码迷 >> Android >> 使用LayoutTransition实现时,DragLinearLayout库在运行时崩溃
  详细解决方案

使用LayoutTransition实现时,DragLinearLayout库在运行时崩溃

热度:94   发布时间:2023-08-04 10:27:22.0

在我还实现Android的LayoutTransition之前,DragLinearLayout库的实现工作正常。

我收到此错误:

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

And I get runtime errors on these two methods in the DragLinearLayout class : 
1. addView(draggedItem.view, switchPosition);  //called in on drag
2. onDrag(deltaY); // called in the onTouchEvent override method. 

我通过在实现活动中重写onTouchEvent()并在触摸行时在DraggerLinearLayout上将setLayoutTransition参数设置为null来阻止崩溃,然后在调用onAnimaitonEnd时在DragLinearLayout中将其设置为null,我在实现活动中调用一个方法并使setLayoutTransition()参数不再为null。

但这会导致一些滞后,并且在您停止拖动并使其稳定时在拖动的行上消失一秒钟,然后重新出现。

无论如何,是否可以使用此库来实现LayoutTransition,或使用动画添加行并为DragLinearLayout的大小递增动画设置任何其他推荐的技术?

提前致谢。

因此,答案是可能的。

为此,请从库中获取代码并复制并粘贴到您自己的类中,以创建自己的DragLinearLayout。 或将库添加为外部库。 我们将这个新类称为DragLinearLayout2。

在DragLinearLayout2中,添加一个LayoutTransition对象作为成员变量:

 private LayoutTransition layoutTransition;

然后,在startDrag()方法中,在该方法的顶部添加以下内容:

layoutTransition = getLayoutTransition();
                if (layoutTransition != null) {
            setLayoutTransition(null);
                    }

然后,在onDragStop()方法中,进入已实现的onAnimationEnd()方法并在末尾添加:

 if (layoutTransition != null && getLayoutTransition() == null) {
                                        setLayoutTransition(layoutTransition);
                                    }

给我发消息,如果您需要我发送课程的我的版本。

  相关解决方案