我需要一些帮助。我有创建项目的活动。接下来我想将它发送到第二个活动中的片段,所以我需要先将它发送到该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创建了但我不知道怎么做?也许还有其他任何解决方案吗?
答案 0 :(得分:1)
将您的subList
声明为公开并填充一次。因此,您需要稍微修改onResume
函数。检查列表是否已填充。如果没有,请从附加内容填充列表,反之亦然。
答案 1 :(得分:1)
ListsubList = new ArrayList&lt;&gt;(); 每次onResume()调用“删除条目无法管理”的原因时,都会创建列表。因此,要么获取此列表的副本,要么每次检查哪些元素被删除,然后将数据设置为listview。