Llamar a un método Fragmento desde una actividad principal
Veo en la Guía de desarrollo de Fragmentos de Android que una "actividad puede llamar a métodos en un fragmento adquiriendo una referencia al Fragmento de FragmentManager, usando findFragmentById()
o findFragmentByTag()
".
El siguiente ejemplo muestra cómo obtener una referencia de fragmento, pero no cómo llamar a métodos específicos en el fragmento.
¿Alguien puede dar un ejemplo de cómo hacer esto? Me gustaría llamar a un método específico en un Fragmento de la Actividad principal. Gracias.
No entiendo la pregunta exactamente porque es demasiado simple:
ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
fragment.<specific_function_name>();
Si está utilizando "importar android.app.Fragment;" Luego use:
1)
ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
fragment.specific_function_name();
Donde R.id.example_fragment es probablemente la identificación de FrameLayout dentro de su diseño xml. O
2)
ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentByTag(“FragTagName”);
fragment.specific_function_name();
Donde FragTagName es el nombre que especificaste cuando lo hiciste:
TabHost mTabHost.newTabSpec(“FragTagName”)
Si está utilizando "importar android.support.v4.app.Fragment;" Luego use:
1)
ExampleFragment fragment = (ExampleFragment) getSupportFragmentManager().findFragmentById(R.id.example_fragment);
fragment.specific_function_name();
O
2)
ExampleFragment fragment = (ExampleFragment) getSupportFragmentManager().findFragmentByTag(“FragTagName”);
fragment.specific_function_name();
Si está utilizando una biblioteca de soporte, querrá hacer algo como esto:
FragmentManager manager = getSupportFragmentManager();
Fragment fragment = manager.findFragmentById(R.id.my_fragment);
fragment.myMethod();
Demasiado tarde para la pregunta, pero esta es una manera fácil de obtener una instancia de fragmento y llamar a métodos en un fragmento; tienes que obtener una instancia de tu fragmento y luego llamar a tu método público:
En tu fragmento:
private static yourFragment instance;
luego en onCreateView
tu fragmento:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
instance= this;
View v = inflater.inflate(R.layout.fragment_tools, container, false);
binding = FragmentToolsBinding.inflate(inflater, container, false);
return v;
}
y además en tu fragmento tienes que tener un método estático que te devuelva la instancia:
public static yourFragment GetInstance()
{
return instance;
}
entonces tienes un método público en tu fragmento que quieres llamar así:
public void theMethod()
{
Toast.makeText(getActivity(), "Test", Toast.LENGTH_SHORT).show();
}
luego puedes obtener una instancia de fragmento y llamar a tu método público no estático de esta manera:
yourFragment frag = yourFragment.GetInstance();
frag.theMethod();