Довод "против" Cómo comunicar una actividad ООН fragmento

Я gustaría сабля cómo acceder las переменные de una actividad desde su fragmento.

Pondré ООН ejemplo параграф aclarar ми duda:

Довод "против" Supongamos que tengo una actividad una переменный глобальный llamada ventanaFragmentoAbierta, uno y quiero que cuando el fragmento abra de sus разметки ponga su доблесть a true вход y la actividad se реальный en tiempo (я gustaría trabajar en el onBackPressed() en función de esto).

1
задан 15.01.2017, 18:10
0 ответов

В Activity ты определяешь твой метод, чтобы изменять переменную:

public void setVariable(boolean valor){
   ventanaFragmentoAbierta = valor;
}

и ты это соглашаешься с Fragment таким образом:

((TuActivity)getActivity()).setVariable(true);

Осуществляется, таким образом, так как определять публичную переменную в одной Activity смоги давать место в проблемы, если у тебя есть другая Activity с той же публичной переменной, нужно заверять в том, что соглашается на метод Класса, чтобы изменять Вашу переменную.

3
ответ дан 03.12.2019, 17:41
  • 1
    Правильная форма состоит в том, чтобы осуществлять интерфейс, чтобы предотвращать будущие сомнения, когда getActivity у него не будет этого mé совсем (из-за ясности có я говорю) –  14.01.2017, 13:33
  • 2
    Фрагмент загружен Activity, в которой actualizarí в переменную, интерфейс я думаю, что он чрезмерный. usarí если он был должен обновлять переменную в Activity, отличной от той, которую загружает Fragment. –  14.01.2017, 17:26

Определи интерфейс

В твоем fragment ты определяешь интерфейс и способствуешь тому, чтобы он отпустил исключение, если activity не осуществляет ее

 // Tu Activity deberá implementar esta interfaz
public interface OnVarChangedFromFragment {
    public void onChangeVar();
}

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);

    // De esta forma te aseguras que la activity tenga la interfaz
    // Sino saltará una excepción
    try {
        mCallback = (OnVarChangedFromFragment) activity;
    } catch (ClassCastException e) {
        throw new ClassCastException(activity.toString()
                + " debes implementar OnVarChangedFromFragment");
    }
}

Когда ты будешь нуждаться в том, чтобы сообщить пламя твоему activity интерфейсу тебя, расколите на части, таким образом:

mCallback.onChangeVar();

С другой стороны твой activity осуществит интерфейс

public static class MainActivity extends Activity
        implements OnVarChangedFromFragment

И когда твой fragment призовет к методу снопы то, что ты хочешь в твоем activity, который будет сообщен

Больше info: https://developer.android.com/training/basics/fragments/communicating.html#Implement

0
ответ дан 03.12.2019, 17:41
  • 1
    =0 интерфейс, чтобы обновлять переменную? Фрагмент загружен Activity, в которую он хочет обновить переменную. Это бы это применило, чтобы обновлять другую Activity, отличную от той, которая загружает фрагмент. –  14.01.2017, 17:15
  • 2
    Интерфейс, чтобы сообщать activity со всеми фрагментами, в которые оно нуждается в том, чтобы общаться, тебе кажется редким, на самом деле? –  14.01.2017, 19:35
  • 3
    Она кажется ложью, что ты даешь мне негатив, когда я объяснил правильный способ находиться в связи activity с fragment –  14.01.2017, 19:43
  • 4
    Я не дал негатив, и смоги быть формой, calro, но он не использовал бы ее, если бы у него было несколько переменных, которые было нужно изменять с несколькими интерфейсами = / –  14.01.2017, 21:43

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

public class Ejemplo {
public static int str_casa = -1;

ты имеешь инициализирования, так как, позвонив другого класса, идет получать стоимость если только она не была изменена в течении. Сейчас чтобы звонить из другого класса только ты был бы должен делать это.

Ejemplo.str_casa

и так ты получил бы стоимость, у которой есть изменчивое счастье

-1
ответ дан 03.12.2019, 17:41
  • 1
    Потому что есть что-то плохо в соглашении переменная Activity с Fragment (как Google это называет)? Случай, описанный в вопросе вероятно другой, который ты думаешь. –  14.01.2017, 02:15
  • 2
    Это не должно делаться никогда, есть другие более работоспособные формы для comunicació n в java –  14.01.2017, 20:08
  • 3
    Просвет существуют другие способы звонить в контентов из других Views, но вопрос говорит ясное добро, которое требует получать переменные фрагмента, ademá s, что человек editó Ваш вопрос. Было, так как querí чтобы соглашаться на Views. –  16.01.2017, 00:25
  • 4
    @pcg26 есть небольшие формы má s работоспособные в java, что соглашаться поле напечатало прямо, даже, что есть большие формы má s расположенные в порядке, и несомненно это не самая худшая практика, используют getters и сеттеров . Я предполагаю, что ты относишься в comunicació n прямая между фрагментами с " это не hace". Я gustarí, то есть, потому что не deberí чтобы соглашаться mé все Activity прямо Fragment . Если это не делается, я не нахожу много почувствованный в mé совсем getActivity () из класса Fragment . –  17.01.2017, 03:59