Подтвердить что ты не робот

Вызов метода активности изнутри фрагмента

Я пытаюсь вызвать метод в действии с экрана фрагмента.

У меня есть метод myMethod(), который находится в активности под названием MyActivity; У меня есть фрагмент Screen1Fragment.

Я бы назвал MyActivity.myMethod() из Screen1Fragment, но я не уверен, как это сделать.

Раньше Screen1Fragment был активным, поэтому я расширял MyActivity, чтобы я мог напрямую позвонить MyMethod(). Но мне пришлось изменить активность на фрагмент для использования скользящих вкладок.

Спасибо заранее.

4b9b3361

Ответ 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();

   }