Android 从服务中删除ListView中的项会导致很多错误

Android 从服务中删除ListView中的项会导致很多错误,android,listview,Android,Listview,我有个人列表视图,ArrayAdapter可以显示这些人的图像。在每个人的照片下有两个按钮“喜欢”和“不喜欢”。如果我按“喜欢”或“不喜欢”按钮,此项目将随动画从列表中删除: protected void removeListItem(View rowView, final int positon) { Animation out = AnimationUtils.makeOutAnimation(getActivity(), true); rowView.startAnimat

我有个人列表视图,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); 
}
但当我这样做时,出现了很多错误:

  • 列表仅在点击后更新
  • 如果从列表中删除最后一项,则该片段不会关闭
  • 如果按“喜欢/不喜欢”按钮,有时会发生ArrayIndexOfBound异常

  • 你能帮我一下吗,为什么会出现这种情况以及如何修复它?

    解决方案很简单,这里的代码没有错误:

    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工具包”

    本视频介绍了conceop的工作原理:

    这份文件很有用: