在一个活动中,我正在从服务器检索数据。有限数量的TableRow
s 包含布局 xml 文件中预定义的更多视图,全部设置为android:visibility="gone"
. 此外,java 类中有一个数组,其中包含这些TableRow
s 的所有 ID。对于每个输入的“数据条目”,我填充这样一个TableRow
,将其设置为可见并为其设置动画(动画是从随机选择的垂直侧“推入”)。作为进一步的提示,这在本问题后面很重要,从服务器检索的每个数据包都与一个月有关。
每当我获取数据时,我都会执行以下过程
- 用信息填充仍然不可见
TableRow
的s - 每次执行第 1 步时,布尔数组中的一个值被设置为
true
- 称呼
showAnimation()
- 对于布尔数组中为真的每个条目,获取id 数组中的
TableRow
索引i
,设置动画并将可见性设置为可见
这工作正常。即使在开始动画之前设置了可见性,也没关系,因为这需要的时间很短,动画在我们眼中已经开始了。
现在问题来了:相反的方式行不通。让我澄清一下:我想要将TableRow
s 推出窗口,然后设置为不可见的响应。每当我更改实际月份时就消失了,然后将新条目推入。问题是,一旦动画开始,View
s 就被设置为不可见/消失。我试图用第一个答案中解释的AnimationListener
类似方法来解决这个问题。这导致了两种可能的方式:
AnimationListener
为每个定义这样一个TableRow
并在onAnimationEnd()
. 我觉得这很丑陋,因为它不是动态的。- 可以访问 中的一种索引,并为每个的动画
AnimationListener
设置相同的侦听器。在这里我不知道怎么可能解决这个问题。正如我之前发现的那样,在循环中设置 s 上的动画(在我的情况下为 for 循环)会导致动画在循环完成时启动,而不是在设置时启动。因此,即使我在那个 for 循环中携带一个全局索引变量以在 中使用,它显然也会一事无成。TableRow
View
onAnimationEnd()
有人知道实现这一点的更好方法吗?用 a 解决它Handler.postDelayed()
并不能解决问题,因为新数据可能已经来自服务器,因此新条目已经可见(因此新条目设置为不可见)。