在片段/生命周期问题中收到项目后从 Activity 中删除项目

delete item from Activity after receive it in Fragment / Lifecycle issue

我需要一些帮助。我在创建项目的地方有 activity。接下来我想将它发送到第二个 activity 中的片段,所以我需要首先将它发送到那个 Activity (我说得对吗?)。这就是我创建项目的方式:

public void savePart() {
        Part part = new Part(name,quantity,"","",tag,"","2");
        Intent intent = new Intent(this,InvActivity.class);
        intent.putExtra("Part", (Serializable) part);
        setResult(2,intent);
        finish();
    }

这是我在第二个收到它的方式 activity:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == 2) {
        part = (Part) data.getSerializableExtra("Part");
    }
}

我有方法 return 片段中的部分 :

public Part getMyData() {
        return part;
    }

在 Fragment 的 onResume() 中,我收到了 Part 对象,检查是否存在具有类似代码的对象,如果不存在,则将其添加到 ListView:

@Override
    public void onResume() {

    super.onResume();
    List<Part>subList = new ArrayList<>();
    if (mActivity.getMyData() != null) {
        Part part = mActivity.getMyData();
        for(Part parts : mParts) {
            if (parts.getCode().contains(part.getCode())) {
                subList.add(parts);
            }
        }
        if (subList.size() == 0) {
            mParts.add(part);
            adapter = new PartAdapter(getContext(), R.layout.part_item, mParts, mActivity, new AdapterCallback() {
                @Override
                public void onMethodCallback() {

                }
            });
            mPartsLV.setAdapter(adapter);
        } else {
            Toast.makeText(getContext(), R.string.equipment_exists, Toast.LENGTH_SHORT).show();
        }
    }

}

到目前为止一切正常。项目已正确添加并显示在 ListVIew 中 fragment.Here 是问题开始的地方 :) 在 listView 行中我有 imageView 从 ListView 中删除项目。

mDelete.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    mParts.remove(part);
                    notifyDataSetChanged();

            }
        });

效果很好,但是...当片段返回到 onResume() 时,已删除的项目再次显示为 ListView。那是因为每次我收到 Part 并检查 List 中是否存在。我想我应该在从创建 Part 的 Activity 收到 Part 后以某种方式明确意图,但我不知道如何?也许还有其他解决方案吗?

将您的 subList 声明为 public 并填充一次。所以你需要稍微修改一下你的 onResume 函数。检查列表是否已填充。如果没有,请从额外内容中填充列表,反之亦然。

ListsubList = new ArrayList<>(); 每次调用 onResume() 时都会创建您的列表,这就是无法管理删除条目的原因。所以要么复制这个列表,要么每次检查哪些元素被删除,然后将数据设置到列表视图。