2014-08-28 16 views
5

Các phương pháp hay nhất cho tương tác phân đoạn mảnh vỡ (được mô tả herehere) buộc Activity thực hiện trình lắng nghe được xác định bởi đoạn con. Sau đó, Activity sẽ quản lý liên lạc giữa các đoạn.Các tương tác phân đoạn từng mảnh của Android

Từ sự hiểu biết của tôi, điều này là để giữ cho các mảnh được ghép lỏng lẻo với nhau. Tuy nhiên,

  1. Đây cũng là trường hợp cho các đoạn lồng nhau? Tôi có thể tưởng tượng rằng nó có thể có ý nghĩa đối với một đoạn lồng nhau để báo cáo trực tiếp cho phân đoạn gốc của nó thay vì Hoạt động.

  2. Nếu một đoạn lồng nhau có phần cha của nó thực hiện trình lắng nghe của nó, làm thế nào một (hoặc một) nên yêu cầu đoạn cha để làm điều này. Nói cách khác, là một tương tự như mô hình như sau nhưng đối với Fragments:

    @Override 
    public void onAttach(Activity activity) { 
        super.onAttach(activity); 
    
        try { 
         mCallback = (OnHeadlineSelectedListener) activity; 
        } catch (ClassCastException e) { 
         throw new ClassCastException(activity.toString() 
           + " must implement OnHeadlineSelectedListener"); 
        } 
    } 
    

Trả lời

1

Chừng nào bạn xác định một giao diện trong đoạn, bạn có thể có những hoạt động phụ huynh hoặc đoạn cha mẹ thực hiện nó. Không có quy tắc nào nói rằng đoạn không nên thực hiện giao diện của một đoạn con. Một ví dụ mà điều này có nghĩa là đoạn A có hai mảnh vỡ B, C. A thực hiện giao diện B, khi A nhận lại cuộc gọi, nó có thể cần phải cập nhật đoạn C. Chính xác điều tương tự với hoạt động, mức độ khác nhau.

+0

tuy nhiên, cách được mô tả trong liên kết google được đăng trong câu hỏi khuyến khích/thực thi nó thành 'Hoạt động' bằng cách gắn trình nghe bằng cách sử dụng' onAttach() 'của đoạn và ném lỗi nếu không. – bcorso

+0

Tài liệu khuyến khích đoạn không nên giao tiếp trực tiếp với một đoạn khác. Không phải là một Hoạt động. – CChi

+1

Có lý do cụ thể nào mà Google đề xuất đưa ra một 'Ngoại lệ' nếu người nghe không được thực hiện bởi 'Hoạt động'. Tôi có nên xóa mã đó không? – bcorso

0

Bạn có thể triển khai cùng một mẫu cho tương tác con/cha mẹ bằng cách sử dụng getParentFragment(). Phân đoạn gốc đề cập đến phân đoạn nào được thêm vào thông qua ChildFragmentManager của nó. Nếu Fragment này được đính kèm trực tiếp vào Activity, phương thức này trả về null.

4

Nếu bất cứ ai muốn một ví dụ về triển khai thực hiện đảm bảo bối cảnh cha mẹ thực hiện các callbacks trong khi không quan tâm cho dù đó là một hoạt động hoặc mảnh, sau đây làm việc cho tôi:

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
    if (context instanceof Callbacks) { 
     mCallbacks = (Callbacks) context; 
    } else { 
     if (getParentFragment() != null && getParentFragment() instanceof Callbacks) { 
      mCallbacks = (Callbacks) getParentFragment(); 
     } else { 
      throw new RuntimeException(context.toString() 
        + " must implement " + TAG + ".Callbacks"); 
     } 
    } 
} 

@Override 
public void onDetach() { 
    super.onDetach(); 
    mCallbacks = null; 
} 

Thưởng thức! Tuy nhiên,

Các vấn đề liên quan