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

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

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


person Jude Fernandes    schedule 20.02.2017    source источник
comment
вы должны опубликовать свой код для лучшего понимания   -  person ATEF    schedule 20.02.2017
comment
искал такой же   -  person Shirish Herwade    schedule 10.05.2017
comment
stackoverflow.com/questions/12364434/   -  person Shirish Herwade    schedule 10.05.2017


Ответы (2)


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

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

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

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
    }
}

Дополнительные сведения см. в документации о связи между фрагментами.

person GVillani82    schedule 20.02.2017
comment
Я пробовал выше, но в этом случае (то есть в случае с OP) это бесполезно... потому что, наконец, вам нужно использовать методы получения в Activity, и поэтому не было необходимости реализовывать эту иерархию типов интерфейса. Ваш пример действительно полезен, когда вы хотите получать/отправлять значения между фрагментами, т.е. из одного фрагмента в другой. - person Shirish Herwade; 10.05.2017

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

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

((ACTIVITY_NAME)this.getActivity()).VARIABLE_NAME //this refers to your fragment
person ATEF    schedule 20.02.2017