我有ListView of Persons,ArrayAdapter来显示这些人的图像。有两个按钮"喜欢"并且"不喜欢"在每个人的照片下。如果我按下喜欢或不喜欢按钮,则此项目将从列表中删除动画:
protected void removeListItem(View rowView, final int positon) {
Animation out = AnimationUtils.makeOutAnimation(getActivity(), true);
rowView.startAnimation(out);
rowView.setVisibility(View.INVISIBLE);
Handler handle = new Handler();
handle.postDelayed(new Runnable() {
public void run() {
persons.remove(positon);
mMyAnimListAdapter.notifyDataSetChanged();
}
}, 500);
}
还有一些API可以生成我们可以获得的人员列表。此API会对列表进行更改(状态更改为下一个值之一:"无","已删除","已删除"不喜欢") 。 如果状态更改为"已删除"我需要从列表中删除此人并更新ListView。我是这样做的:
if (changedPerson.getStatus().equals("removed")) {
persons.remove(index);
mMyAnimListAdapter.notifyDataSetChanged();
notifyRemovedStatus(idOfChangedPerson);
}
但是当我这样做时,发生了很多错误:
你能帮助我吗,为什么要这样做?以及如何解决这个问题?
答案 0 :(得分:0)
解决方案很简单,这里的代码没有错误:
if (changedPerson.getStatus().equals("removed")) {
persons.remove(index);
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
mMyAnimListAdapter.notifyDataSetChanged();
if (persons.size() == 0) {
getActivity().onBackPressed();
}
}});
notifyRemovedStatus(idOfChangedPerson);
}
我违反了此规则"请勿从UI线程外部访问Android UI工具包" 。
此视频介绍了工作概念: https://www.udacity.com/course/viewer#!/c-ud853/l-1469948762/e-1530568562/m-1530568563
此文档非常有用:http://developer.android.com/guide/components/processes-and-threads.html