คุณควรพยายามแยกชิ้นส่วนออกจากกิจกรรมในกรณีที่คุณต้องการใช้งานที่อื่น คุณสามารถทำได้โดยการสร้างอินเทอร์เฟซที่กิจกรรมของคุณดำเนินการ
ดังนั้นคุณจะกำหนดอินเทอร์เฟซดังต่อไปนี้:
ตัวอย่างเช่นคุณต้องการให้สตริงเป็นกิจกรรมและให้มันคืนค่าจำนวนเต็ม:
public interface MyStringListener{
public Integer computeSomething(String myString);
}
สามารถกำหนดได้ในส่วนหรือไฟล์แยกต่างหาก
จากนั้นคุณจะให้กิจกรรมของคุณใช้อินเทอร์เฟซ
public class MyActivity extends FragmentActivity implements MyStringListener{
@Override
public Integer computeSomething(String myString){
/** Do something with the string and return your Integer instead of 0 **/
return 0;
}
}
จากนั้นในแฟรกเมนต์ของคุณคุณจะมีตัวแปร MyStringListener และคุณจะตั้งค่าผู้ฟังในเมธอดแฟรกเมนต์ onAttach (กิจกรรมกิจกรรม)
public class MyFragment {
private MyStringListener listener;
@Override
public void onAttach(Context context) {
super.onAttach(context);
try {
listener = (MyStringListener) context;
} catch (ClassCastException castException) {
/** The activity does not implement the listener. */
}
}
}
แก้ไข (2015/12/17):onAttach(Activity activity) is deprecated, use onAttach(Context context) instead, it works as intended
คำตอบแรกใช้งานได้จริง แต่มันจะแสดงชิ้นส่วนปัจจุบันของคุณกับกิจกรรมโฮสต์ วิธีปฏิบัติที่ดีในการป้องกันไม่ให้แฟรกเมนต์แยกออกจากกิจกรรมโฮสต์ในกรณีที่คุณต้องการใช้มันในระดับความรุนแรงอื่น