วิธีที่ง่ายที่สุดในการส่งข้อมูลกลับคือ setArgument () ตัวอย่างเช่นคุณมี fragment1 ซึ่งเรียก fragment2 ซึ่งเรียก fragment3, fragment1 -> framgnet2 -> fargment3
ในส่วนย่อย 1
public void navigateToFragment2() {
if (fragmentManager == null) return;
Fragment2 fragment = Fragment2.newInstance();
String tag = "Fragment 2 here";
fragmentManager.beginTransaction()
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
.add(R.id.flContent, fragment, tag)
.addToBackStack(null)
.commitAllowingStateLoss();
}
ใน fragment2 เราเรียกว่า fragment3 ตามปกติ
private void navigateToFragment3() {
if (fragmentManager == null) return;
Fragment3 fragment = new Fragment3();
fragmentManager.beginTransaction()
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
.replace(R.id.flContent, fragment, tag)
.addToBackStack(null)
.commit();
}
เมื่อเราทำภารกิจใน fragment3 เสร็จแล้วเราจะเรียกสิ่งนี้ว่า:
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
if (fragmentManager == null) return;
fragmentManager.popBackStack();
Bundle bundle = new Bundle();
bundle.putString("bundle_filter", "data");
fragmentManager.findFragmentByTag("Fragment 2 here").setArguments(bundle);
ตอนนี้ใน fragment2 เราสามารถเรียกอาร์กิวเมนต์ได้อย่างง่ายดาย
@Override
public void onResume() {
super.onResume();
Bundle rgs = getArguments();
if (args != null)
String data = rgs.getString("bundle_filter");
}
onActivityResult
เมธอดของพาเรนต์แฟรกเมนต์ได้หากต้องการ