2016-09-23 21 views
0

したがって、2つのフラグメント、フラグメントAおよびフラグメントBがあります。どちらもリストビューを持っています。フラグメントAからフラグメントBに行くと、製品のリストビューがあります。製品をクリックすると、フラグメントAのリストビューがこの1つの製品で満たされます。これを数回行うことができます。フラグメントBからフラグメントAにデータを渡す

だから、私の質問は以下のとおりです。

  • 断片化し、フラグメントBからのデータを渡す方法(popBackStack()を使用して、バックフラグメントAへ行くために)
  • 私はフラグメントからフラグメントBに行くときA、popBackStack()を使用するとフラグメントAはまだ存在しますか?リストビューにアイテムが残っています。フラグメントBから前に追加しました。

PS:イベントバスを使用しようとしましたが失敗しました。

+0

両方のフラグメントで同じホスティングアクティビティを使用していますか? – fernandospr

+0

私はMainActivityのフラグメントAに行き、フラグメントAのJavaファイルからフラグメントBに移動します。これは同じホストを意味します。 – Tomek

+0

FragmentA、FragmentBおよびActivityの使い方を示す質問を編集できますか? – fernandospr

答えて

0

リスナーインタフェースメカニズムを使用して、フラグメントをアクティビティに戻す必要があります。

活動がFragmentBで選択された製品を知っているように:

public class MainActivity extends AppCompatActivity implements FragmentBListener { 

    ... 

    @Override 
    public void onProductSelected(Product product) { 
     showFragmentAWithProduct(product); 
    } 

    private void showFragmentAWithProduct(Product product) { 
     // Logic to show FragmentA 
    } 

} 

public class FragmentB extends Fragment { 

    private FragmentBListener mListener; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     ... 

     yourListView.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       Product product = // Get the selected product 
       mListener.onProductSelected(product); 
      } 
     }); 

     ... 
    } 

    @Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 
     try { 
      mListener = (FragmentBListener) context; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(context.toString() 
        + " must implement " + FragmentBListener.class.toString()); 
     } 
    } 

    public interface FragmentBListener { 
     void onProductSelected(Product product); 
    } 
} 

FragmentAまたはBに引数を渡すには、あなたがそれらの引数を持つパブリックメソッドを公開することができMainActivityがFragmentAとFragmentBが含まれていると仮定すると、

フラグメントをリフレッシュするか、これを行う引数を使用してフラグメントをインスタンス化できます。

public class FragmentX extends Fragment { 
    public static FragmentX newInstance(Param1 param1, Param2 param2) { 
     FragmentX fragment = new FragmentX(); 
     Bundle args = new Bundle(); 
     args.putXXX(key1, param1); 
     args.putXXX(key2, param2); 
     fragment.setArguments(args); 
     return fragment; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     if (getArguments() != null) { 
      Param1 param1 = getArguments().getXXX(key1); 
      Param2 param2 = getArguments().getXXX(key2); 
      ... 
     } 
    } 

    ... 
} 
+0

私は主なアクティビティからフラグメントaにもフラグメントaからフラグメントbにもデータを渡す必要はありませんでした。フラグメントAからフラグメントBにデータを渡す必要がありました。それでも私は1つの作業アイデアを思いついた。とりあえずありがとう! – Tomek

関連する問題