2016-08-09 16 views
0

私は助けが必要です。私はアイテムを作成するアクティビティを持っています。次に、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に存在するかどうかを確認するたびに発生するためです。私はパートが作成されたアクティビティからパートを受け取った後、何らかの意図を明らかにする必要があると思いますが、私はどのように分かりませんか?多分、他の解決策はありますか?

答えて

1

subListをパブリックとして宣言し、1回入力します。したがって、onResume関数を少し修正する必要があります。リストに既に入力されているかどうかを確認します。そうでない場合は、補足のリストを作成し、逆も同様です。

+0

リストが更新されたかどうかを確認するにはbooleanを使用する必要がありますか? :) – Bartos

+0

リストのサイズを確認してください。そうするだろう。それが役に立ったら受け入れてください: –

+1

ありがとう! :)それは多くを助ける – Bartos

1

ListsubList = new ArrayList <>(); あなたのリストはonResume()が呼び出されるたびに作成されます。そのため、削除エントリは管理できませんでした。したがって、このリストのコピーを取るか、または削除された要素をチェックするたびに、リストビューにデータを設定します。

関連する問題