在Fragment / Lifecycle问题中接收它后,从Activity中删除项目

时间:2016-08-09 09:03:13

标签: android lifecycle

我需要一些帮助。我有创建项目的活动。接下来我想将它发送到第二个活动中的片段,所以我需要先将它发送到该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();
    }

这是我在第二项活动中收到它的方式:

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

我有方法在片段中返回部分:

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中。这是问题开始的地方:)在listView行中我得到了从ListView中删除项目的imageView。

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

            }
        });

这很好用但是...当片段回到onResume()时,删除的项目再次显示是ListView。这是因为每次我收到Part并检查List中是否存在。我认为我应该以某种方式明确意图收到Part from Activity,Part创建了但我不知道怎么做?也许还有其他任何解决方案吗?

2 个答案:

答案 0 :(得分:1)

将您的subList声明为公开并填充一次。因此,您需要稍微修改onResume函数。检查列表是否已填充。如果没有,请从附加内容填充列表,反之亦然。

答案 1 :(得分:1)

ListsubList = new ArrayList&lt;&gt;(); 每次onResume()调用“删除条目无法管理”的原因时,都会创建列表。因此,要么获取此列表的副本,要么每次检查哪些元素被删除,然后将数据设置为listview。