在片段/生命周期问题中收到项目后从 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() 时都会创建您的列表,这就是无法管理删除条目的原因。所以要么复制这个列表,要么每次检查哪些元素被删除,然后将数据设置到列表视图。
我需要一些帮助。我在创建项目的地方有 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() 时都会创建您的列表,这就是无法管理删除条目的原因。所以要么复制这个列表,要么每次检查哪些元素被删除,然后将数据设置到列表视图。