Вызов метода активности изнутри фрагмента
Я пытаюсь вызвать метод в действии с экрана фрагмента.
У меня есть метод myMethod(), который находится в активности под названием MyActivity;
У меня есть фрагмент Screen1Fragment.
Я бы назвал MyActivity.myMethod() из Screen1Fragment, но я не уверен, как это сделать.
Раньше Screen1Fragment был активным, поэтому я расширял MyActivity, чтобы я мог напрямую позвонить
MyMethod().
Но мне пришлось изменить активность на фрагмент для использования скользящих вкладок.
Спасибо заранее.
Ответы
Ответ 1
Используйте getActivity()
в вашем фрагменте.
MyActivity activity = (MyActivity) getActivity();
activity.myMethod();
если вы не уверены, что ваш фрагмент прикреплен к MyActivity, тогда
Activity activity = getActivity();
if(activity instanceof MyActivity){
MyActivity myactivity = (MyActivity) activity;
myactivity.myMethod();
}
Ответ 2
Вы должны сделать свой фрагмент полностью независимым от той активности, к которой вы ее привязываете. Точка фрагментов заключается в том, что вы можете повторно использовать их в разных контекстах с различными видами деятельности. Чтобы достичь этого и все еще иметь возможность вызывать методы из вашей деятельности, следующий шаблон, рекомендованный в официальной документации .
В вашем фрагменте:
-
определить открытый интерфейс с помощью метода
public interface MyFragmentCallback{
public void theMethod();
}
-
определить поле и получить ссылку на литой:
private MyFragmentCallback callback;
public void onAttach(Activity activity){
callback = (MyFragmentCallback) activity
super.onAttach(activity);
}
В вашей деятельности
- реализовать
MyFragmentCallback
в определении класса.
- реализовать
theMethod()
в вашей деятельности (Eclipse попросит вас сделать это)
Затем из вашего фрагмента вы можете вызвать callBack.theMethod()
Разница между этим и просто вызовом вашего метода в getActivity() заключается в том, что ваш фрагмент больше не сопряжен с этим конкретным действием. Таким образом, вы можете повторно использовать его с другой деятельностью, например, для телефонов, а другой для планшетов.
Ответ 3
Если метод является статическим методом MainActivity, что-то вроде:
public static void someMethod(){}
Тогда это довольно просто. Просто позвоните
MainActivity.someMethod()
Однако, я думаю, что вы действительно хотите получить доступ к некоторой функции из класса Activity. Затем вы можете использовать следующий код в создателе представления фрагментов
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState){
container.getContext().someMethod();
}