it-swarm.com.ru

Доступ к переменным активности во фрагменте

Если у меня есть действие A, которое расширяет базовую активность BA, то я могу безопасно получить доступ к любой переменной в активности BA из действия A. Теперь то, что я использую, содержит действие A, которое включает в себя фрагмент F . Теперь из этого фрагмента. я хочу получить доступ ко всем переменным A таким же образом, как я делал выше, и если нет, то есть ли безопасный способ сделать это, кроме как сделать его доступным через публичные методы.

Или есть способ, которым я могу скопировать переменные в базовом действии в базовый фрагмент, чтобы он был доступен во всех действиях и фрагментах.

5
Jude Fernandes

Хороший способ его реализации - использовать интерфейс, как предполагает официальная документация.

Чтобы позволить Фрагменту взаимодействовать до его Активности, вы можете определить интерфейс в классе Fragment и реализовать его в Деятельность.

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

public interface MyListener {
     public void onAction();
}

и определить (все еще во фрагменте) поле типа MyListener

MyListener mCallback;

Затем вы можете установить этот слушатель, используя метод onAttach(Activity):

mCallback = (MyListener) activity;

Теперь каждый раз, когда вы хотите вызвать из своего фрагмента метод в упражнении, вы можете использовать обратный вызов:

mCallback.onAction();

Конечно, ваша активность должна реализовывать интерфейс, иначе вы получите исключение при преобразовании вашей активности в MyListener.

Итак, просто сделайте:

public class MyActivity extends Activity implements MyFragment.MyListener {
    @Override
    public void onAction() {
        // some stuff
    }
}

Для более подробной информации взгляните на документацию о связи между фрагментами

3
GVillani82

Если VARIABLE_NAME является переменной в вашей активности ACTIVITY_NAME, и к ней можно получить доступ извне Activity ACTIVITY_NAME

Затем используйте этот код:

((ACTIVITY_NAME)this.getActivity()).VARIABLE_NAME //this refers to your fragment
1
Atef Hares