リスナーインタフェースメカニズムを使用して、フラグメントをアクティビティに戻す必要があります。
活動が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);
...
}
}
...
}
両方のフラグメントで同じホスティングアクティビティを使用していますか? – fernandospr
私はMainActivityのフラグメントAに行き、フラグメントAのJavaファイルからフラグメントBに移動します。これは同じホストを意味します。 – Tomek
FragmentA、FragmentBおよびActivityの使い方を示す質問を編集できますか? – fernandospr