私は助けが必要です。私はアイテムを作成するアクティビティを持っています。次に、2番目のアクティビティでフラグメントに送信したいので、最初にそのアクティビティに送信する必要があります(私は正しいですか?)。これは私がアイテムを作成する方法である:フラグメント/ライフサイクルの問題で受け取った後、アクティビティからアイテムを削除
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();
}
これは、私は2番目の活動でそれを受け取る方法です:
@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();
}
}
}
これまでのところすべてうまくいきます。アイテムは正しく追加され、fragment.LayerVIewで表示されます。問題はどこから始まりますか?listViewの行には、ListViewからアイテムを削除するimageViewがあります。
mDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mParts.remove(part);
notifyDataSetChanged();
}
});
これは素晴らしいですが、...フラグメントがonResume()に戻ったときに、削除されたアイテムが再びListViewに表示されます。これは、Partを受け取ってListに存在するかどうかを確認するたびに発生するためです。私はパートが作成されたアクティビティからパートを受け取った後、何らかの意図を明らかにする必要があると思いますが、私はどのように分かりませんか?多分、他の解決策はありますか?
リストが更新されたかどうかを確認するにはbooleanを使用する必要がありますか? :) – Bartos
リストのサイズを確認してください。そうするだろう。それが役に立ったら受け入れてください: –
ありがとう! :)それは多くを助ける – Bartos