gpt4 book ai didi

java - 防止在现有条目上执行 ListView 插入动画

转载 作者:搜寻专家 更新时间:2023-11-01 08:54:05 30 4
gpt4 key购买 nike

我在 YouTube 上观看了 Android 开发人员关于动画化 ListView 插入和删除的视频。这些里面有非常复杂的代码,我尝试搜索其他东西并找到了这个。

http://karnshah8890.blogspot.fi/2013/04/listview-animation-tutorial.html

它的实现非常简单,适用于大多数部分。我的问题是,当我在提供给 ArrayAdapter 的 ArrayList 中插入一个新项目时,由于 adapter.notifyDataSetChanged()...我认为所有现有元素都会重新插入。当我在 ListView 中插入一个条目时,如何防止所有条目再次获得动画效果?我只想要新的动画。

我以这种方式在代码中使用我的 ListView:

toggles = (ListView) v.findViewById(R.id.toggleListView);

adapter = new ToggleListAdapter(getActivity(), toggleTasks);
toggles.setAdapter(adapter);

插入新项目时,我会更新 ArrayList (toggleTasks),然后在适配器上调用 notifyDataSetChanged()

toggleTasks.add(task);
adapter.notifyDataSetChanged();

这是我的 ArrayAdapter 中的 getView() 方法。

public View getView(int position, View convertView, ViewGroup parent) {     
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ToggleTask task = toggles.get(position);

String startActionName = "";
String finishActionName = "";
int imageDrawableId = -1;

// Deleted the part where I get the values for those three variables above

final Holder holder;
if(convertView == null) {
convertView = inflater.inflate(R.layout.mute_toggles_toggle_view, null);

holder = new Holder();
holder.image = (ImageView) convertView.findViewById(R.id.image);
holder.startAction = (TextView) convertView.findViewById(R.id.startAction);
holder.finishAction = (TextView) convertView.findViewById(R.id.finishAction);

convertView.setTag(holder);
} else {
holder = (Holder) convertView.getTag();
}

holder.image.setImageResource(imageDrawableId);
holder.startAction.setText(startActionName);
holder.finishAction.setText(finishActionName);

Animation animation = AnimationUtils.loadAnimation(getContext(), R.anim.listview_push_left_in); // Third animation example on the site linked earlier
animation.setDuration(500);
convertView.startAnimation(animation);
animation = null;

return convertView;
}

最佳答案

在 ArrayAdatper 类中添加一个全局整数(我称它为 changedIndex)并为其创建 getter 和 setter。然后在将项目添加到列表之前说 adapter.setChangedIndex(index) (无论你命名你的 setter )。您实际上是在提前告诉它您想为哪一个制作动画。

在 getView 中更改它

if(changedIndex == position){
Animation animation = AnimationUtils.loadAnimation(getContext(), R.anim.listview_push_left_in); // Third animation example on the site linked earlier
animation.setDuration(500);
convertView.startAnimation(animation);
animation = null;
}

然后改变

toggleTasks.add(task);
adapter.notifyDataSetChanged();

toggleTasks.add(task);
toggles.getPosition(task);
adapter.notifyDataSetChanged();

*我没有检查任何这段代码,但我相信它应该可以工作

关于java - 防止在现有条目上执行 ListView 插入动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20447067/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com