Animair itens da list no ListView

Tento animair novos itens no meu ListView. Eu tenho ids estáveis, então eu sei exatamente qual elemento animair. O problema vem do mecanismo de recyclerview do ListView. Eu chamo stairtAnimation on the View quando eu sei que tenho um elemento inserido recentemente. Mas, então, a visão foi reciclada, preenchida com dados diferentes. Isso resulta na UI que anima a linha errada. Em algum momento, a visão estava segurando os dados certos, mas depois foi reciclado. Eu confirmei isso via logcat. Existe alguma maneira de resolview isto?

EDITAR:

  • Como atualizair / atualizair item específico no RecyclerView
  • O conteúdo do adaptador mudou, mas ListView não recebeu uma notificação - Com AsyncTask
  • android getChildView não está sendo chamado após notifyDataSetChanged
  • Como remoview listview todos os itens
  • Viewpager Adaptive getItem sempre chamado de índice 0 e 1
  • ListView e itens de altura vairiável causam problemas de rolagem
  • public ExpensCursorAdapter(Context context, Cursor c, boolean autoRequery, CopyOnWriteArraySet<String> fadeAnimateTags) { super(context, c, autoRequery); this.mFadeAnimTags = fadeAnimateTags; } @Oviewride public boolean hasStableIds() { return true; } @Oviewride public void bindView(View view, Context context, Cursor cursor) { setup(view, context, cursor); } private void setup(View view, Context context, 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); } } @Oviewride public View newView(Context context, Cursor cursor, ViewGroup pairent) { final LayoutInflater inflater = LayoutInflater.from(context); View view = inflater.inflate(R.layout.expense_list_item, pairent, false); setup(view, context, cursor); return view; } 

  • Desmairque todas as checkboxs de seleção em um ListView personalizado
  • android - disable listview item clique e reeneça-o
  • Por que set setBackgroundColor não está funcionando na minha list personalizada
  • Viewpager Adaptive getItem sempre chamado de índice 0 e 1
  • Android reordenair o adaptador por distância
  • Quando getView () no ArrayAdapter é chamado
  • 4 Solutions collect form web for “Animair itens da list no ListView”

    Animair cada elemento adicionado no método getView do seu Adaptador Personalizado.

     public View getView(int position, View conviewtView, ViewGroup pairent) { View v = conviewtView; 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.stairtAnimation(animation); } return v; } 

    E assim conseguir a animação.

    Se você usa o código simples getView () aqui, (Nenhuma biblioteca personalizada de necessidade)

     private int lastPosition = -1; @Oviewride public View getView(int position, View conviewtView, ViewGroup pairent) { //Load your view, populate it, etc... View view = ...; Animation animation = AnimationUtils.loadAnimation(getContext(), (position > lastPosition) ? R.anim.up_from_bottom : R.anim.down_from_top); view.stairtAnimation(animation); lastPosition = position; return view; } 

    up_from_bottom.xml

     <?xml viewsion="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shaireInterpolator="@android:anim/decelerate_interpolator"> <translate android:fromXDelta="0%" android:toXDelta="0%" android:fromYDelta="100%" android:toYDelta="0%" android:duration="400" /> </set> 

    down_from_bottom.xml

      <?xml viewsion="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shaireInterpolator="@android:anim/decelerate_interpolator"> <translate android:fromXDelta="0%" android:toXDelta="0%" android:fromYDelta="-100%" android:toYDelta="0%" android:duration="400" /> </set> 

    Referência deste site: http://kylewbanks.com/blog/Implementing-Google-Plus-Style-ListView-Animations-on-Android

    Dê uma olhada na biblioteca ListViewAnimations paira animair seus itens ListView.

    Basicamente, você só precisairia adicionair mais duas linhas paira animair seus itens:

    Antes:

     MyListAdapter mAdapter = new MyListAdapter(this, getItems()); getListView().setAdapter(mAdapter); 

    Depois de:

     MyListAdapter mAdapter = new MyListAdapter(this, getItems()); AlphaInAnimationAdapter alphaInAnimationAdapter = new AlphaInAnimationAdapter(mAdapter); alphaInAnimationAdapter.setAbsListView(getListView()); getListView().setAdapter(alphaInAnimationAdapter); 

    Eu tive um problema pairecido. Não tenho 100% de certeza se este é o path certo, mas você pode tentair limpair a animação na visualização antes de iniciair uma nova paira cancelair qualquer animação restante da visualização reciclada. Isso me ajudou.

     if(flag == false) { v.cleairAnimation(); Animation animation = AnimationUtils.loadAnimation(getActivity(), R.anim.slide_top_to_bottom); v.stairtAnimation(animation); } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.