微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – ListView中的动画列表项

我尝试在ListView中为新项目制作动画.我有稳定的id-s,所以我确切知道要动画的元素.问题来自ListView的循环机制.当我知道我有一个最近插入的元素时,我在视图上调用startAnimation.但随后,视图得到了回收,充满了不同的数据.
它会在UI上为错误的行设置动画.在某些时候,视图持有正确的数据,但随后被回收.我通过logcat证实了这一点.
有什么方法可以解决这个问题吗?

编辑:

public ExpensCursorAdapter(Context context,Cursor c,boolean autoRequery,copyOnWriteArraySet<String> fadeAnimateTags) {
    super(context,c,autoRequery);
    this.mFadeAnimTags = fadeAnimateTags;
}

@Override
public boolean hasstableIds() {
    return true;
}

@Override
public void bindView(View view,Context context,Cursor cursor) {
    setup(view,context,cursor);
}

private void setup(View view,Cursor cursor) {
    final String id = cursor.getString(4);
    if (LOCAL_LOGV) Log.v(TAG,String.format("Create item for %s. Received view: %s",id,view.toString()));
    view.setTag(id);
    final TextView dateText = (TextView) view.findViewById(R.id.date);
    final TextView timeText = (TextView) view.findViewById(R.id.time);
    final TextView title = (TextView) view.findViewById(R.id.title);
    final TextView amount = (TextView) view.findViewById(R.id.amount);
    final Date date = new Date(cursor.getLong(0));
    title.setText(cursor.getString(1));
    dateText.setText(dFormat.format(date));
    timeText.setText(tFormat.format(date));
    amount.setText(String.format("%d Ft",cursor.getInt(2)));
    if (cursor.getInt(3) == 1) {
        timeText.setTextColor(Color.LTGRAY);
        title.setTextColor(Color.LTGRAY);
        dateText.setTextColor(Color.LTGRAY);
        amount.setTextColor(Color.LTGRAY);
    } else {
        timeText.setTextColor(Color.BLACK);
        title.setTextColor(Color.BLACK);
        dateText.setTextColor(Color.BLACK);
        amount.setTextColor(Color.BLACK);
    }
    if (mFadeAnimTags.contains(id)) {
     view.setAnimation(AnimationUtils.loadAnimation(context,R.anim.fade));
     mFadeAnimTags.remove(id);
    }

}

@Override
public View newView(Context context,Cursor cursor,ViewGroup parent) {
    final LayoutInflater inflater = LayoutInflater.from(context);
    View view = inflater.inflate(R.layout.expense_list_item,parent,false);
    setup(view,cursor);
    return view;
}

解决方法

自定义适配器的getView方法中为每个添加的元素设置动画.
public View getView(int position,View convertView,ViewGroup parent) {

    View v = convertView;

    if (v == null) {
        LayoutInflater vi = (LayoutInflater) getActivity()
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = vi.inflate(R.layout.simple_list_item_1,null);
    }

    ListData o = list.get(position);
    TextView tt = (TextView) v.findViewById(R.id.toptext);

    tt.setText(o.content);

    Log.d("ListTest","Position : "+position);

    if(flag == false) {
        Animation animation = AnimationUtils.loadAnimation(getActivity(),R.anim.slide_top_to_bottom);
        v.startAnimation(animation);
    }
    return v;
}

从而实现动画.

原文地址:https://www.jb51.cc/android/313139.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐