2015-09-10 24 views
6

Sự khác nhau giữa getView()getActivity() là gì?Sự khác nhau giữa getView() và getActivity() là gì?

Tôi đã sử dụng cả hai phương pháp nhưng không hiểu sự khác biệt cơ bản thậm chí phương pháp sử dụng cũng tương tự trong android:

ListView deliverItemList = (ListView) getView().findViewById(R.id.load_item_list); 
ListView deliverItemList = (ListView) getActivity().findViewById(R.id.load_item_list); 

tôi đã giả định rằng getView() có thể sản xuất NullPointerException, chia sẻ kiến ​​thức của bạn với tôi và đó phương pháp được khuyến khích?

Trả lời

7

getActivity() trả về Activity lưu trữ Fragment, trong khi lợi nhuận getView() xem bạn thổi phồng và trở bởi onCreateView. Sau đó trả về một giá trị != null chỉ sau onCreateView lợi nhuận

+0

như vậy, tôi phải sử dụng getActivity() hoặc getView() trong Miếng ? – Abe

+1

99% thời gian getView. Hoặc nếu bạn có thể, ghi đè lên 'onViewCreated' và sử dụng tham số cũ VIew, để tìm kiếm các view của bạn – Blackbelt

+0

trong trường hợp của tôi, tôi ghi đè lên onActivityCreated – Abe

6

Từ tài liệu android:

getActivity() trả về Hoạt động mảnh này hiện liên quan, và getView() trả về xem gốc cho đoạn của layout (cái được trả về bởi onCreateView (LayoutInflater, ViewGroup, Bundle)), nếu được cung cấp.

Vì vậy, trong trường hợp của bạn, bởi dòng mã sau đây:

getView().findViewById(R.id.load_item_list); 

bạn đang tìm kiếm xem trong đoạn của bạn, nhưng bằng cách sử dụng dòng mã sau đây:

getActivity().findViewById(R.id.load_item_list); 

bạn đang tìm kiếm chế độ xem trong hoạt động lưu trữ đoạn của bạn.

Giới thiệu về câu hỏi của bạn về việc sử dụng cái nào, điều đó tùy thuộc. Nếu bạn đang cố gắng để thổi phồng đoạn, bạn cần phải thổi phồng xml của bạn trong onCreateView, và sử dụng rằng quan điểm lạm phát bạn tìm kiếm quan điểm của bạn như thế này:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.your_layout, container, false); 
    ListView lv = (ListView)v.findViewById(R.id.view_id); 
} 
+0

Phương thức gọi 'getView(). FindViewById (R.id.load_item_list)' có thể tạo ra 'java.lang.NullPointerException – Abe

+0

Làm cách nào để ngăn chặn sự nhận biết nullpointerexception? – Abe

+1

có, nếu bạn gọi getView() trong onCreateView(), nó sẽ trả về null. Bạn có thể gọi getView() trong phương thức onViewCreated(), hoặc bạn có thể thực hiện các thao tác sau trong hàm onCreateView() của bạn: Xem v = inflater.inflate (your_fragment_layout_id, container, false); ListView lv = v.findViewById (R.id.load_item_list); – yrazlik

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