2015-09-10 5 views
6

В чем разница между getView() и getActivity()?В чем разница между getView() и getActivity()?

Я использовал оба метода, но не понимают принципиальной разницы даже методология использования являются также же в Android:

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

Я предположил, что getView() может привести к NullPointerException, поделитесь своими знаниями со мной и который метод рекомендуется?

ответ

7

getActivity() возвращает Activity, на котором размещается Fragment, в то время как getView() возвращает представление, которое вы надутый и возвращенное по onCreateView. Последнее возвращает значение != null только после onCreateView возвращает

+0

так, я должен использовать getActivity() или GetView() в Фрагмент? – Abe

+1

99% времени getView. Или если вы можете, переопределите 'onViewCreated' и используйте прежний параметр VIew, чтобы искать ваши представления – Blackbelt

+0

в моем случае Я переопределяю onActivityCreated – Abe

6

От андроид Docs:

getActivity() возвращает активность этого фрагмент в настоящее время связан и GetView() возвращает вид корня для осколка макет (тот, который возвращается onCreateView (LayoutInflater, ViewGroup, Bundle)), если он предоставлен.

Таким образом, в вашем случае, с помощью следующей строки кода:

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

вы ищете для представления в вашем фрагменте, но используя следующую строку кода:

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

Вы ищете представление в своей деятельности, в которой размещен фрагмент.

О вашем вопросе о том, какой из них использовать, это зависит. Если вы пытаетесь раздуть фрагмент, вам нужно надуть XML в onCreateView, и с помощью этого надутого вида вы ищете ваши мнения, как это:

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

Метод invocation 'getView(). FindViewById (R.id.load_item_list)' может производить 'java.lang.NullPointerException – Abe

+0

Как предотвратить исключение nullpointer? – Abe

+1

Да, если вы вызываете getView() в onCreateView(), он возвращает null. Вы можете вызвать getView() в методе onViewCreated(), или вы можете сделать следующее в вашей функции onCreateView(): View v = inflater.inflate (your_fragment_layout_id, container, false); ListView lv = v.findViewById (R.id.load_item_list); – yrazlik

Смежные вопросы