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

302
26 ноября 2016, 19:20

У меня активность содержит фрагмент. При нажатии кнопки в этом фрагменте, у меня должны измениться состояния View в макете активности. В активности у меня есть готовый метод, который будет делать это. Но как мне это реализовать, чтобы при нажатии по этой кнопки, вызывался бы метод активности?

Answer 1

Это можно сделать через интерфейс (назовем MyCallback). Создаете интерфейс с названием вашего метода (можно внутри вашего фрагмента).

public interface MyCallback{
    void method();
}

Вашу активити наследуете от этого интерфейса.

public class MyActivity extends AppCompatActivity implements MyCallback {
    @ovveride
    public void method(){
    //логика
    }
}

В фрагменте создаете объект данного типа и делаете

@Override
public class MyFragment extends Fragment {
private  MyCallback myCallback;
@Override
public void onAttach(Context context) {
    super.onAttach(context);
    myCallback = (MyCallback) context;
}
}

Ну и вызовите метод myCallback.method() где вам надо во фрагмете

Answer 2

Объявляешь интерфейс с методами которые тебе необходимо выполнять в Activity:

interface FragmentActions {
    void doSomething();
}

Имплементируешь интерфейс в Activity:

class MainActivity extend Activity implement FragmentActions {
        override void doSomething(){
          ... Вызываешь свои методы реализованные в активности
        }
    }

Вызываешь метод во фрагменте:

class MainFragment extend Fragment {
    private FragmentActions listener;
    override void onAttach(Context context){
      super.onAttach(context)
      listener = (FragmentActions)context;
    }
    override void onViewCreated(...){
      btn.setOnClickListener(()->listener.doSomething())
    }
}
READ ALSO
Анонимные классы [дубликат]

Анонимные классы [дубликат]

На данный вопрос уже ответили:

213
application context

application context

Пытаюсь развернуть вэб приложение на хостинге(там стоит томкат)По умолчанию tomcat предоставляет контекст к приложению равный имени war'ника,...

180
Изменение уровня масштабирования google maps

Изменение уровня масштабирования google maps

Как возможно приблизить карту сразу по местности, а именно, если как на примере маркеры находятся в одном городе, то сразу открывать приближенную...

270
Отобразить картинки в ListView

Отобразить картинки в ListView

Для загрузки изображения использую:

237