2012-02-09 44 views
29

Tôi chỉ sử dụng một đoạn trong một hoạt động cụ thể của phụ huynh. Bây giờ tôi tự hỏi, nếu có bất kỳ trở ngại nếu tôi gọi phương pháp trong hoạt động cha mẹ trực tiếp từ các mảnh vỡ bao gồm như sau:.Phương thức hoạt động gọi từ Fragment

getActivity() someMethodInParentActivitiy()

Một giải pháp phổ biến hơn sẽ được xác định một giao diện người nghe chính thức trong đoạn để gọi lại hoạt động gốc và sau đó thực hiện hoạt động thực hiện giao diện đó.

Có bất kỳ lý do (ví dụ độ tin cậy hoặc tốc độ) tại sao tôi nên sử dụng thứ hai nhiều giải pháp phức tạp thay vì phương pháp trực tiếp các cuộc gọi từ các mảnh vỡ để hoạt động?

Trả lời

21

Đừng nhìn vào hiệu suất ngay từ đầu. Hãy nhớ rằng "tối ưu hóa sớm là gốc rễ của tất cả các điều ác". Cách tiếp cận thứ hai tốt hơn vì đoạn của bạn có thể được sử dụng trong các hoạt động khác nhau. Cách tiếp cận đầu tiên giới thiệu nhiều phụ thuộc hơn trong mã của bạn, phân đoạn phụ thuộc vào loại hoạt động. Bạn đang mất khả năng kiểm tra, tái sử dụng, phức tạp nhỏ. Nó có thể có vẻ đơn giản hơn ngay bây giờ, nhưng trong tương lai bạn sẽ thấy ;-)

+0

Cảm ơn, tôi cũng lưu ý rằng việc truy cập phương thức hoạt động trực tiếp thông qua getActivity() không dễ dàng như vậy. Có lẽ tôi cần thêm một diễn viên? – Anguel

+0

Đúng, để triển khai có chứa 'someMethodInParentActivitiy()'. Nhưng như tôi đã viết nó không được khuyến khích. – pawelzieba

+0

Thực ra tôi có chút bối rối, vì Diane Hackborn nói rằng việc sử dụng các cuộc gọi như vậy là ok: http://markmail.org/thread/sgvnc7bjtjfbh5rx#query:+page:1+mid:6kakhwquxdigf7om+state:results – Anguel

24

bổ sung diễn viên cần phải được thực hiện:

Activity activity123 = getActivity(); 

if(activity123 instanceof ParentActivity) { 
    ((ParentActivity) activity123).someMethodInParentActivity(); 
} 

tuy nhiên như @pawelzieba viết nếu u muốn sử dụng đoạn đó trong một hoạt động khác có lẽ là trường hợp nó sẽ không hoạt động theo cách này .. Chúc mừng

+0

làm việc tốt ........ !!! –

9

Khi tôi cần làm điều gì đó như thế này, tôi chỉ sử dụng BroadcastReceiver để tôi có thể gọi nó từ bất kỳ đâu.

BroadcastReceiver receiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
     if (action != null) { 
      if (action.equals("WHATEVER_ACTION")) { 
       // Do stuff 
      } 
     } 
    } 
}; 

Sau đó, trong đoạn của tôi, tôi sẽ chỉ cần sử dụng:

activity.sendBroadcast (Ý định mới() setAction ("WHATEVER_ACTION").);

+1

Hình như thực hành tốt nhất với tôi. Một mẫu thiết kế cơ bản, quá. – rwst

+0

Chúng ta cũng phải đăng ký đài phát thanh trong bản kê để sử dụng nó chỉ để liên lạc giữa hoạt động và đoạn? – Max

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