我有一个带有自定义适配器的 ListView,显示来自数据库的信息。当我启动应用程序时,从数据库中读取数据,将其提供给适配器,然后将其附加到 ListView。在 ListView 上运行一个 LayoutAnimationController,平滑地显示内容。
this._lvList = (ListView)_v.findViewById(R.id.lvList);
this._lvList.setAdapter(new TableAdapter(getActivity(),R.layout.tablerow,Category.getCategories()));
LayoutAnimationController lac = new LayoutAnimationController(AnimationUtils.loadAnimation(getActivity(), R.anim.slide_in_left));
lac.setDelay(0.2f);
this._lvList.setLayoutAnimation(lac);
this._lvList.startLayoutAnimation();
完全没有问题。
现在,当我单击 ListView 的任何条目时,未单击的条目会消失,单击的条目将成为列表中唯一的条目,并按预期显示在顶部。
View v;
for(int i = 0;i<_lvList.getChildCount();i++) {
v = this._lvList.getChildAt(i);
if(v!=clickedView) {
Animation animSlideOut = AnimationUtils.loadAnimation(getActivity(), i%2==0?R.anim.slide_out_left:R.anim.slide_out_right);
animSlideOut.setStartOffset(i*50);
// some more stuff
}
v.startAnimation(animSlideOut);
}
这也有效,但现在的问题是,如果我再次单击该单个列表条目,我希望重新填充列表,再次显示所有项目。
我想我可以从一开始就使用代码(第一个片段),因为它在启动应用程序时工作正常,但是......这次......它没有。没有动画发生。原因是,我的 ListView 中没有动画视图(上一步中的视图除外)。
我没有创建一个新的 Tableadapter 我已经尝试清除它,而是将其填充为新的,称为 notifyDataSetChanged()... 没用,因为
_lvList.getChildCount();
Stills 返回 1 个视图,而适配器包含所有 18 个条目。我也试过
requestLayout();
forceLayout();
invalidate();
invalidateViews();
强制 ListView 在动画之前生成其子视图,但它不起作用。因此,在我调用布局动画之后,atm ListView 会立即出现。
摘要:我的 ListView 在布局动画开始之前不包含子视图,我该如何强制它生成它们?
提前谢谢:)