2

我有一個ListView及其適配器類,它擴展了BaseAdapterAndroid notifyDataSetChanged()只有最後添加的項目

我想動畫一個小的自定義部分進入列表視圖。

我有部分動畫是從右向左滑動 - 這是第一次非常好。

在適配器的方法,同樣如圖所示,爲簡潔:

public View getView(){ 

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

看起來不錯,但是當我增加一個項目chatAdapter.notifyDataSetChanged();被觸發其刷新我的所有項目,並重新播放動畫。

我只是想動畫適配器本身內的最後一項。

我希望你能幫助我。

回答

5

您可以添加公佈爾變量(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); 
    } 

} 

注:這是快速的解決方案,我不知道是否還有其他辦法。

希望這對你有所幫助。

+0

國旗完美!謝謝 – schwertfisch

0

您可以檢查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; 
} 
相關問題