การประกาศตัวแปรสาธารณะในคลาสเป็นวิธีที่ง่ายที่สุด:
ในคลาสเป้าหมาย:
public class MyFragment extends Fragment {
public MyCallerFragment caller;
...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
caller.str = "I changed your value!";
caller.i = 9999;
...
return inflater.inflate(R.layout.my_fragment, container, false);
}
...
}
ในคลาสผู้โทร:
public class MyCallerFragment extends Fragment {
public Integer i;
public String str;
...
FragmentManager fragmentManager = getParentFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
myFragment = new MyFragment();
myFragment.caller = this;
transaction.replace(R.id.nav_host_fragment, myFragment)
.addToBackStack(null).commit();
...
}
หากคุณต้องการใช้กิจกรรมหลักก็ทำได้ง่ายเช่นกัน:
ในชั้นเรียนกิจกรรมหลัก:
public class MainActivity extends AppCompatActivity {
public String str;
public EditText myEditText;
...
}
ในชั้นเรียน:
public class MyFragment extends Fragment {
private MainActivity main;
...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
main = (MainActivity) getActivity();
main.str = "I changed your value!";
main.myEditText.setText("Wow I can modify the EditText too!");
...
return inflater.inflate(R.layout.my_fragment, container, false);
}
...
}
หมายเหตุ: โปรดใช้ความระมัดระวังเมื่อใช้เหตุการณ์ (onClick, onChanged ฯลฯ ) เนื่องจากคุณสามารถอยู่ในสถานการณ์ "ต่อสู้" ที่มีมากกว่าหนึ่งตัวกำหนดตัวแปร ผลลัพธ์ที่ได้คือบางครั้งตัวแปรจะไม่เปลี่ยนหรือจะกลับไปเป็นค่าสุดท้ายอย่างน่าอัศจรรย์
สำหรับการผสมผสานเพิ่มเติมให้ใช้ความคิดสร้างสรรค์ของคุณ :)