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.
- Cómo configurar Custom ListView en Android Fragement?
- Ocultar MenuItem en algunos fragmentos
- Android.support.v4.app.Fragment.setUserVisibleHint puntero nulo en la reanudación de la aplicación
- ViewPager con Fragmentos que contienen TableLayouts se carga lentamente:
- No se pueden agregar varios fragmentos a LinearLayout
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 🙂
- Cómo manejar onContextItemSelected en una actividad de múltiples fragmentos?
- ¿El SDK de Facebook sólo funciona con Actividades?
- Android - SupportMapFragment con GoogleMaps API 2.0 dando IllegalArgumentException
- Acceda a la vista de fragmentos de padres de ViewPager en el fragmento secundario de Pager
- ¿Cuándo adjuntar / separar Android Fragments a mano?
- Dos fragmentos en una página de viewpager
- ¿Cómo bloquear la orientación de los fragmentos sin bloquear la orientación de la actividad?
- onPrepareOptionsMenu Duplica el elemento en ActionBar
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 – Softboard empuja el diseño de mi actividad fuera de la pantalla
- Detectar la actualización de la aplicación de Android y establecer la clase de aplicación booleana para mostrar / ocultar el CLUF