适配器“保持”以在我为其设置动画时查看

时间:2012-12-17 17:34:27

标签: android gridview android-listview android-arrayadapter

我正在为GridView使用自定义适配器,并为其提供自定义数据类的ArrayList。

这个想法是,当用户按下某个项目上的(+)时,它的数字会上升,而当它们按下( - )时,它会下降。

这与以下代码完美配合:

的活动:

//playerLayouts is the ArrayList of my Player class.
playerLayouts.get(position).changeLife(-1); //All this does is decrement life by 1.
adapter.notifyDataSetChanged();

适配器:

holder.textLife = (TextView) row.findViewById(R.id.player.text_life);
...
holder.textLife.setText(Integer.toString(player.life));

所以这很有效。我按加号,它上升,我按下减号,它下降。一切都很好。

但是,如果我想在视图中添加一个“-1”弹出窗口,显示已减去1,并且我为视图设置了动画,则会出现问题。

...
//textLifeChange is a different TextView in the layout. Also, I'm using NineOldAndroids.
textLifeChange.setText(Integer.toString(player.lifeChange));
animate(holder.textLifeChange).setDuration(2000).alpha(0); //There are a few more animations in addition to this one.

基本上,无论何时播放动画(完整的两秒钟),视图都不再进行更新。

例如,说“life”= 20.我点击( - ),现在它说19,我的小弹出显示“-1”并淡出。然后,仅仅一秒钟之后,我再次击中(-1)。什么都没发生。 “生活”TextView仍然显示19,弹出窗口只是继续播放动画而没有任何变化。所以我等了一秒钟,动画结束了。现在,如果我再次按( - ),它会再次正确更新。

有趣的是,如果我记录我的setText方法,我会看到 正在使用正确的数字进行更新,并且正在调用getView,但它只是...而不是明显更新。

怎么了?

1 个答案:

答案 0 :(得分:1)

我敢说你的动画正在占用UI线程,从而阻止了界面其他部分的变化。这个asnwer shoud帮助你:

Android: Running thread preventing animation from starting