事实: 我有一个包含6个项目(字符串)的列表,最后一个项目的字符串是“更多选项”。
点击“更多选项”后,列表应在第5项和“更多选项”(最后一项)之间添加3个项目。
- item1
- item2
- item3
- item4
- item5
- "more options"
问题: 我使用notifyDataSetChanged()通知适配器将新项添加到列表中。 但是最好的方法是动画将列表从6个项目扩展到9个项目而不重新创建整个列表?
列表的最终外观(在将item6,item7,item8与一个动画放在一起之后)。
- item1
- item2
- item3
- item4
- item5
- item6 (new)
- item7 (new)
- item8 (new)
- "more options"
将每件物品放在一起并使item6,item7,item8不可见是不好的做法/ hacky?什么是最好的方式?
我希望我的问题写得很好,每个人都能理解我的痛苦。
由于
答案 0 :(得分:1)
你必须创建像这样的动画
private void enlarge(final View v, AnimationListener al)
{
final int initialHeight = v.getMeasuredHeight();
Animation anim = new Animation() {
@Override
protected void applyTransformation(float interpolatedTime, Transformation t)
{
if (interpolatedTime == 1)
{
v.setVisibility(View.GONE);
}
else
{
v.getLayoutParams().height = initialHeight + (int) (initialHeight * interpolatedTime);
v.requestLayout();
}
}
@Override
public boolean willChangeBounds()
{
return true;
}
};
if (al != null)
{
anim.setAnimationListener(al);
}
anim.setDuration(ANIMATION_DURATION);
v.startAnimation(anim);
}
然后在创建AnimationListener
之前将项目添加到listview时使用此选项 AnimationListener al = new AnimationListener() {
@Override
public void onAnimationEnd(Animation arg0)
{
mAnimList.remove(index);
ViewHolder vh = (ViewHolder) v.getTag();
vh.needInflate = true;
mMyAnimListAdapter.notifyDataSetChanged();
}
@Override
public void onAnimationRepeat(Animation animation)
{
}
@Override
public void onAnimationStart(Animation animation)
{
}
};
并最终致电
enlarge(v, al);