Android notifyDataSetChanged() только последний добавленный элемент

У меня есть ListView и его класс адаптера, который расширяет BaseAdapter.

Я хочу анимировать небольшой пользовательский фрагмент, который входит в список.

У меня есть анимация для частичного слайда справа налево - это работает очень хорошо в первый раз.

В методе Адаптера, как показано, для краткости:

public View getView(){

    Animation an = AnimationUtils.loadAnimation(mContext, R.anim.transladar);
    an.reset();
    vi.startAnimation(an);
    return vi;
}

выглядит хорошо, но когда я добавляю еще один элемент, срабатывает chatAdapter.notifyDataSetChanged();, который обновляет все мои элементы и перезапускает анимацию.

Я просто хочу анимировать последний элемент в самом адаптере.

Я надеюсь, что вы можете мне помочь.


person schwertfisch    schedule 02.04.2013    source источник


Ответы (2)


Вы можете добавить общедоступную логическую переменную (isFirstTime = true;) и в своем getView() проверить ее следующим образом.

if(isFirstTime){
    Animation an = AnimationUtils.loadAnimation(mContext, R.anim.transladar);
    an.reset();
    vi.startAnimation(an);

   if(position == getCount()-1) isFirstTime =false;
}else{
  if(position == getCount()-1){
     Animation an = AnimationUtils.loadAnimation(mContext, R.anim.transladar);
    an.reset();
    vi.startAnimation(an);
   }

}

Примечание: это быстрое решение, я не знаю, есть ли другой способ.

Надеюсь, это помогло вам.

person AwadKab    schedule 02.04.2013

Вы можете проверить, является ли convertview нулевым, а затем подготовить анимацию. Проверено и работает для меня:

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    if (null == convertView) {
        convertView = LayoutInflater.from(getActivity()).inflate(
                R.layout.workshop_components_list_item, null);
    }

    Animation animation = null;
    ViewHolder holder = (ViewHolder) convertView.getTag();
    if (null == holder) {
        holder = new ViewHolder();
        holder.name = (TextView) convertView.findViewById(R.id.textView_listItemName);
        holder.position = position;
        animation = AnimationUtils.loadAnimation(getActivity(), R.anim.components_list_item);
        animation.setDuration(500);
    }

    ListItem item = getItem(position);
    holder.name.setText(item.getName());

    if (null != animation) {
        convertView.startAnimation(animation);
        animation = null;
    }

    return convertView;
}
person Arkadiusz Cieśliński    schedule 27.10.2014