ฉันคิดว่าคุณสามารถใช้ รูปแบบผู้สังเกตการณ์ ซึ่งเป็นแนวทางปฏิบัติที่ดีในสถานการณ์ของคุณได้
ตามที่อธิบายโดย GoF:
กำหนดการพึ่งพาแบบหนึ่งต่อกลุ่มระหว่างออบเจ็กต์ เพื่อที่ว่าเมื่อออบเจ็กต์หนึ่งเปลี่ยนสถานะ ผู้อยู่ในอุปการะทั้งหมดจะได้รับแจ้งและอัปเดตโดยอัตโนมัติ
อ่านเพิ่มเติมได้ที่ http://www.java2blog.com/2013/02/observer-design-pattern-in-java.html#TLio7G2ruqxvfZUR.99
ในสถานการณ์ของคุณ คุณมีความสัมพันธ์ดังกล่าว (แบบหนึ่งต่อกลุ่ม) และเมื่อมีเหตุการณ์เกิดขึ้นในกิจกรรมที่คุณต้องการทราบว่ามีสองส่วน
![ป้อนคำอธิบายรูปภาพที่นี่](https://i.stack.imgur.com/G1DoM.png)
แฟรกเมนต์เป็นคลาสผู้สังเกตการณ์นำไปใช้ และกิจกรรมของคุณมีบทบาทเป็นหัวเรื่องดังแสดงในรูปด้านบน
ฉันหวังว่านี่จะช่วยให้คุณนำโค้ดของคุณไปใช้ในทางที่ดีมาก บทช่วยสอนบางส่วนสามารถพบได้ในลิงค์ต่อไปนี้:
https://dzone.com/articles/observer-pattern-java http://www.tutorialspoint.com/design_pattern/observer_pattern.htm
แก้ไข: ในสถานการณ์ที่กำหนด:
public interface OnReceiveListener { // this is your observer interface !
// This can be any number of events to be sent to the activity
void receivePreview(Object... obj);
}
แฟรกเมนต์มีคำจำกัดความที่ถูกต้องกับรูปแบบการออกแบบนี้ ดังนั้นฉันจึงไม่เปลี่ยนโค้ด:
public class OneFragment extends Fragment implements OnReceiveListener{
@Override
public void receivePreview(Object... obj) {
}
}
public class TwoFragment extends Fragment implements OnReceiveListener{
@Override
public void receivePreview(Object... obj) {
}
คุณต้องมีการอ้างอิงถึงส่วนต่างๆ ในกิจกรรม (ในฐานะผู้สังเกตการณ์)
ArrayList< OnReceiveListener > observers = new ArrayList< OnReceiveListener>();
แน่นอนว่าผู้สังเกตการณ์สามารถสมัครสมาชิกหรือลงทะเบียนตัวเองในหัวข้อ ( ส่วนอ้างอิงถึงกิจกรรม (ควรใช้รูปแบบซิงเกิลตันดีกว่า :D) เช่นนี้:
public class MainAct extends AppCompatActivity {
private static MainAct instance;
public static MainAct getInstance() {
if(instance != null)
return instance;
}
// I think it is better to create the instance variable in the onCreate() method of the MainAct activity
onCreate(...)
{
.
.
.
instance = this;
...
}
public void registerObserver(OnReceiveListener observer){
observers.add(observer)
}
/* To avoid memory leaks, remember to unregister receivers when no longer observing */
public void unregisterObserver(OnReceiveListener observer) {
observers.remove(observer);
}
notifyObservers(){
// call this method in the listener you want
for( Observer obser : observers)
obser. receivePreview(param )
}
...
//in fragment initialization:
MainAct.getInstance().registerObserver(this)
person
Sir1
schedule
27.05.2016