2014-11-06 4 views
2

Я ничего не могу найти на этом ... Мне интересно, когда у меня есть фрагмент внутри действия, почему я не могу назвать некоторые вещи, такие как getPackageName() и getContentResolver()?Поведение фрагментов в Android

+2

потому что эти методы не из фрагмента ... – Selvin

ответ

8

Звонок из нестационарной функции внутри фрагмента, после того как он прикреплен к активности.

getActivity().getPackageName(); 
    getActivity().getContentResolver(); 

Как заявил ваш комментатор, это не фрагментные функции, вы должны получить экземпляр contextWrapper.

+0

Это должно быть отмечено как ответ. – Harry

1

Потому что согласно this documentation, методы, которые вы упомянули, являются методами класса Context. Активность - это подкласс контекста, поэтому он имеет эти методы. Фрагмент, однако, нет. Существует два способа получить эти методы из фрагмента:

Первый вариант: после того, как ваш фрагмент был прикреплен (вызывается метод onAttach()), вы можете использовать метод getActivity() для получения активности, которая он был прикреплен к. Затем вы можете использовать getPackageName() и getContentResolver(). Например: getActivity(). GetPackageName(). Для большей безопасности, вы можете сделать:

Activity myActivity = getActivity(); 
if (myActivity != null) 
{ 
    myActivity.getPackageName(); 
    myActivity.getContentResolver(); 
} 
else 
{ 
    //deal with the null problem 
} 

Второй вариант: В методе onCreateView(), ваш фрагмент будет не прилагается, так что вы не можете использовать вышеупомянутый метод. Вы можете использовать LayoutInflater, чтобы получить представление. Затем вызовите getContext() в представлении. Например:

View myView = inflater.inflate(R.layout.my_fragment_layout, container, false); 
myView.getContext().getPackageName(); 
myView.getContext().getContentResolver(); 
Смежные вопросы