Intercambio de datos entre fragmentos y actividad en Android

Ive hizo una pregunta similar antes y no obtuvo una respuesta y parece que muchos otros ppl están buscando una respuesta. Así que estoy publicando esta pregunta para obtener una respuesta clara que todos puedan beneficiarse.

Tengo una actividad con 2 fragmentos en ella. Quiero que fragment2 establezca una variable booleana en Actividad cuando se marque una casilla de verificación para que el fragmento 1 pueda saber si la casilla de verificación estaba marcada.

Este es mi código:

Actividad:

public class modestab extends Activity{ public static Context appContext; public boolean lf=false; public void onCreate(Bundle savedInstanceState){ appContext=this; super.onCreate(savedInstanceState); ActionBar tabbar= getActionBar(); tabbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); ActionBar.Tab ModesTab =tabbar.newTab().setText("Modes"); ActionBar.Tab CatTab =tabbar.newTab().setText("Categories"); Fragment ModesFragment =new modes(); Fragment CatFragment =new cats(); ModesTab.setTabListener(new MyTabsListener(ModesFragment)); CattTab.setTabListener(new MyTabsListener(CatFragment)); tabbar.addTab(ModesTab); tabbar.addTab(CatTab); } 

Fragmento 1: (Donde quiero leer el booleano si se establece en Acitividad arriba:

 @TargetApi(11) public class tabmodes extends Fragment{ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View V=inflater.inflate(R.layout.tab_modes, container, false); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if(lf==false) //lf here is the lf in Activity which I want to get 

Fragmento 2: Donde quiero establecer lf en Actividad

 ..... lifecheck.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){ @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(lifecheck.isChecked()) getActivity().lf=true;//Where I want to set the lf flag in Activity ; } }); 

El código no se compila y no sé cómo establecerlo en la Actividad ni cómo leerlo. Alguien me sugirió que getActivity () pero no soy capaz de ver la variable.

Intenté crear una función setlf (boolean jk) pero tampoco puedo verla …

Cualquier ayuda es bienvenida 🙂

De muchas maneras:

A) Actividad -> Fragmento

  • En su actividad : cree un paquete y utilice fragmento. SetArguments (paquete)
  • En su fragmento : use Bundle bundle = getArguments ()

2) fragmento -> Actividad

  • En su fragmento : crear una interfaz con métodos getter y setter ( métodos callback )
  • En su actividad : implementar la interfaz

3) fragmento -> Actividad

  • En su actividad : Crear público getter y setter u otros métodos
  • En su fragmento : llamado getter de actividad pública, setter u otros métodos usando:

    GetActivity (). GetSomething (), getActivity () .setSomething (args) o getActivity () .someMethod (args)

4) actividad -> fragmento

  • En su fragmento : crear un método público

  • En su actividad : llamar a un fragmento activo método público:

    GetSupportFragmentManager (). FindFragmentById (R.id.your_fragment) .publicMethod (args)

Puede pasar datos entre fragmentos de dos maneras,

Primero, puedes hacerlo usando setArguments (…) y getArguments (….)

En segundo lugar, puede hacerlo utilizando Llamar de nuevo

También puede utilizar EventBus . Es muy simple. https://github.com/greenrobot/EventBus

Definitivamente no utilice métodos estáticos como mi vieja respuesta 🙂

 //In fragment; String user = MainActivity.getUserName(); 

Métodos estáticos son mi antigua solución, pero definitivamente mala solución. No los uses así.

  • Android: pasa un objeto JSON entre fragmentos
  • Deslizar Actualizar diseño enRefresh trabajando pero no mostrando el indicador de actualización
  • Fragmento dentro de la pestaña ¿Actividad perdiendo todos los datos al girar?
  • Listview se bloquea en modo retrato cuando se hace clic en elementos (con fragmentos)
  • Placeholder Fragmento / Actividad principal android.view.InflateException
  • ClassCastException: CustomFragment no se puede convertir en android.app.Fragment / Using android.support.v4.app.Fragment
  • Disposición de la actividad: Clase de fragmento: vs android: atributos de nombre
  • Android: cómo comprobar si el diálogo está mostrando
  • IllegalStateException: La actividad se ha destruido - cuando la aplicación está intentando mostrar DialogFragment una vez más
  • Viewpager no visible cuando tiene cualquier otro diseño como su hermano
  • DialogFragment desaparece en el cambio de orientación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.