2015-08-26 55 views
24

Điều gì khác nhau giữa getContext()getActivity() từ Fragment trong thư viện hỗ trợ?Điểm khác nhau giữa getContext và getActivity từ Fragment trong thư viện hỗ trợ là gì?

Chúng có luôn trả về cùng một đối tượng không? (hoạt động được liên kết với phân đoạn hiện tại)

+0

bạn có thể gọi getContext() theo phân đoạn trực tiếp không? Thay vào đó bạn sử dụng getActivity(). GetContext() – QAMAR

+0

có, tôi có thể http://developer.android.com/reference/android/support/v4/app/Fragment.html#getContext() – mlevytskiy

+0

bắt đầu từ android api 13 – mlevytskiy

Trả lời

26

Trong hầu hết các trường hợp không có sự khác biệt nhưng ...

Vì vậy, ban đầu Fragments nơi tổ chức trong FragmentsActivity và trở lại sau đó để có được Context một gọi getActivity().

Chỉ cần kiểm tra các nguồn và Fragments hiện có thể được lưu trữ bởi bất kỳ ai triển khai giao diện FragmentHostCallback. Và điều này đã thay đổi trong Thư viện hỗ trợ phiên bản 23, tôi nghĩ vậy.

Khi sử dụng phiên bản mới hơn của Thư viện hỗ trợ, khi Fragment không được lưu trữ bởi Activity, bạn có thể nhận các đối tượng khác nhau khi gọi getActivity()getContext().

Khi bạn gọi getActivity(), bạn cũng nhận được Activity cũng là số Context. Nhưng khi bạn gọi getContext, bạn sẽ nhận được Context có thể không phải là Activity.

+0

Bạn có ví dụ về thời điểm lớp 'Không hoạt động' sẽ/có thể triển khai' FragmentHostCallback' – Sree

+0

@Sree xin lỗi nhưng bây giờ. không bao giờ thử nó bản thân mình – pelotasplus

+0

@Sree Điều gì về các mảnh lồng nhau?Tôi gặp phải vấn đề này trong trường hợp tôi được mong đợi getActivity() nhưng getActivity() là null. Trường hợp của tôi là một mảnh lồng nhau, vì vậy có lẽ đó là một trong những trường hợp này? –

3

Hoạt động là một phân lớp của Ngữ cảnh. Hoạt động cũng có các phần tử Window và truy cập vào các phương thức UI, Context thì không. Tuy nhiên, trong phần lớn các trường hợp, nó là như nhau nếu bạn chỉ cần bối cảnh.

+2

Hoạt động là một lớp con của Ngữ cảnh. – cyroxis

+2

Hoạt động là một lớp con của Ngữ cảnh * –

+0

nhưng cùng một đối tượng đó với các giao diện khác nhau và nếu getActivity trả về null, getContext trả về null quá. Có đúng không? – mlevytskiy

1

getContext(): - Trả về ngữ cảnh mà chế độ xem hiện đang chạy. Thông thường hoạt động hiện đang hoạt động. getContext() không được xác định trong một Hoạt động. Nó được sử dụng trong một View (hoặc View subclass) để có được một tham chiếu đến bối cảnh kèm theo (một Activity).

getActivity(): - Phương pháp này cung cấp ngữ cảnh của Hoạt động. Bạn có thể sử dụng nó giống như yourActivity.this. getActivity() thường được sử dụng trong các đoạn để có được bối cảnh của hoạt động mà chúng được chèn vào hoặc tăng cao.

1

@mlevytskiy Vui lòng kiểm tra this Stactoverflow Trả lời. Tôi hy vọng nó sẽ giúp bạn.

getContext() - Chỉ trả lại chế độ xem ngữ cảnh chỉ hoạt động hiện tại.

getActivity() - Trả lại Hoạt động này đoạn hiện đang liên kết với.

getActivity() có thể được sử dụng trong một Fragment để nhận được cha mẹ Hoạt động của Fragment.

0

Bạn có thể sử dụng getActivity(), trả về hoạt động được liên kết với một đoạn. Hoạt động này là một ngữ cảnh (vì Hoạt động mở rộng Ngữ cảnh). getActivity() có thể trả về giá trị rỗng nếu nó được gọi trước khi onAttach của đoạn tương ứng.Ngữ cảnh cung cấp thông tin về Actvity hoặc Application cho các thành phần mới được tạo ra. Ngữ cảnh có liên quan nên được cung cấp cho các thành phần mới được tạo (cho dù bối cảnh ứng dụng hoặc ngữ cảnh hoạt động). Vì Activity là một lớp con của Context, người ta có thể sử dụng nó để có được bối cảnh của hoạt động đó. getContext() Chỉ trả lại chế độ xem ngữ cảnh chỉ hoạt động hiện tại đang chạy.

0

getContext():

Trả về xem bối cảnh chỉ hiện tại hoạt động chạy.

getActivity():

Return Hoạt động mảnh này hiện đang liên kết với.

4

Cho đến nay, các cấp thực hiện duy nhất của FragmentHostCallback (trong hệ điều hành và các thư viện hỗ trợ) luôn trả về giá trị tương tự cho cả hai getContext()getActivity().

Tuy nhiên, các nhà thầu khác của FragmentHostCallback gợi ý rằng trong việc triển khai trong tương lai, chúng tôi có thể nhận được:

  • Một rỗng Activity và không null Context mà không phải là một Activity. Điều này có vẻ không thể xảy ra nhưng chúng ta có thể tưởng tượng rằng các mảnh vỡ có thể được sử dụng bên ngoài các hoạt động trong tương lai hoặc được hoàn toàn sandboxed.
  • Một số không rỗng Activity và không rỗng Context không giống với trường hợp Activity. Ví dụ: Context có thể là ContextThemeWrapper.

Kết luận: khi bạn có thể, sử dụng getContext(). Khi bạn cần cuộc gọi cụ thể cho Hoạt động, hãy sử dụng getActivity().

0
/** 
    * Return the {@link Context} this fragment is currently associated with. 
    */ 
    public Context getContext() { 
     return mHost == null ? null : mHost.getContext(); 
    } 

    /** 
    * Return the {@link FragmentActivity} this fragment is currently associated with. 
    * May return {@code null} if the fragment is associated with a {@link Context} 
    * instead. 
    */ 
    final public FragmentActivity getActivity() { 
     return mHost == null ? null : (FragmentActivity) mHost.getActivity(); 
    } 

từ mã nguồn, chúng tôi có thể thấy rằng khi một đoạn được đính kèm vào Hoạt động, getContext trả về giá trị rỗng. Mặc dù getActivity trả về null khi một đoạn được gắn vào ngữ cảnh thay vì

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