2012-10-29 24 views
12

Gần đây tôi đã làm việc rất nhiều với các mảnh vỡ và tôi chỉ tò mò về cách thực hành tốt nhất là sử dụng tham chiếu đến hoạt động của một phần của đoạn. Nó sẽ được tốt hơn để tiếp tục gọi getActivity() hoặc có một biến parentActivity được khởi tạo trên callback onActivityCreated.Phương pháp hay nhất để tham chiếu hoạt động gốc của một đoạn?

Trả lời

17

Điều này thực sự được bao gồm trong tài liệu Android chính thức trên Phân đoạn. Khi bạn cần bối cảnh của hoạt động gốc (ví dụ: Bánh mì nướng, Hộp thoại), bạn sẽ gọi số getActivity(). Khi bạn cần gọi các phương thức gọi lại trong giao diện của Fragment, bạn nên sử dụng một biến gọi lại được khởi tạo trong onAttach(...).

public static class FragmentA extends ListFragment { 
    ExampleFragmentCallbackInterface mListener; 
    ... 
    @Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 
     try { 
      mListener = (ExampleFragmentCallbackInterface) context; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(context.toString() + " must implement ExampleFragmentCallbackInterface "); 
     } 
    } 
    ... 
} 

Source

+0

Sử dụng FragmentCallbackInterface là cách ưa thích của tôi để thực hiện việc này. –

+0

@James: Bạn có thể giải thích tại sao phương pháp này tốt hơn sử dụng getActivity() không? Đôi khi getActivity() trả về null và ứng dụng gặp sự cố. Bằng cách sử dụng phương pháp trên, bạn có thể chắc chắn rằng ứng dụng sẽ không bị lỗi? Cảm ơn. – Rajat

+1

Nếu getActivity() trả về null thì bạn chưa được đính kèm nên 'mListener' cũng sẽ là rỗng. Cách tiếp cận này tốt hơn bằng cách sử dụng 'getActivity()' vì nó đảm bảo bất kỳ hoạt động nào bạn được gắn vào để thực hiện giao diện cần thiết để làm việc với nội dung trong đoạn. –

8

getActivity() là tốt nhất. Bạn không cần phải duy trì một biến để lưu trữ (luôn luôn, đến chu kỳ ứng dụng!). Nếu cần gọi phương thức và sử dụng! :)

-2

Nếu bạn đang ở trong mảnh, bạn có thể gọi getActivity(); Hoặc nếu bạn đang ở trong phân đoạn, bạn cũng có thể gọi getApplicationContext(). GetContext(); Hầu hết thời gian, getActivity() thực hiện tất cả những gì bạn cần.

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