studio - manual de programacion android pdf
Intercambio de datos entre fragmentos y actividad en Android (4)
He hecho una pregunta similar antes y no obtuve una respuesta y parece que muchas otras personas están buscando una respuesta. Así que estoy publicando esta pregunta para poder obtener una respuesta clara de la que todos puedan beneficiarse.
Tengo una actividad con 2 fragmentos en ella. Quiero que fragment2 establezca una variable booleana en Activity cuando se marca una casilla para que fragment1 pueda saber si la casilla de verificación está 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 Acitivity 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 Activity
.....
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 configurar lf en la actividad ni cómo leerlo. Alguien sugirió que obtengo la actividad () pero no puedo ver la variable.
Traté de crear una función setlf (boolean jk) pero tampoco puedo verla ...
Cualquier ayuda es bienvenida :)
Muchas maneras :
1) Actividad -> Fragmento
- En tu actividad : crea un paquete y usa un fragmento. setArguments(bundle)
- en su Fragmento : use paquete Bundle = getArguments()
2) Actividad -> Fragmento
En tu Fragmento : crea un método público
En tu actividad : llama a un método público de fragmento activo :
getSupportFragmentManager () findFragmentById (R.id.your_fragment) .publicMethod (args)
3) Fragmento -> Actividad
- En tu Fragmento : crea una interfaz con métodos getter y setter ( métodos de devolución de llamada )
- En tu actividad : implementa la interfaz
4) Fragmento -> Actividad
- En tu actividad : Crear getter y setter públicos u otros métodos
En su Fragmento : llamado getter de la actividad pública, setter u otros métodos que usan:
getActivity() .getSomething (), getActivity() .setSomething (args) o getActivity() .someMethod (args)
Puede pasar datos entre fragmentos de dos maneras,
Primero, puedes hacerlo usando setArguments(bundle) y getArguments()
En segundo lugar, puede hacerlo utilizando Call back
También puedes usar EventBus . Es realmente simple. https://github.com/greenrobot/EventBus
Definitivamente no use métodos estáticos como mi respuesta anterior :)
//In fragment;
String user = MainActivity.getUserName();
Los métodos estáticos son mi solución anterior, pero definitivamente una mala solución. No los uses así.