Llamar a un método Fragmento desde una actividad principal

Resuelto gcl1 asked hace 54 años • 14 respuestas

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.

gcl1 avatar Jan 01 '70 08:01 gcl1
Aceptado

No entiendo la pregunta exactamente porque es demasiado simple:

ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
fragment.<specific_function_name>(); 
Dheeresh Singh avatar Jun 05 '2012 18:06 Dheeresh Singh

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(); 
Gene avatar Aug 20 '2014 23:08 Gene

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();
JDJ avatar Jun 11 '2014 23:06 JDJ

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 onCreateViewtu 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();
    
da jowkar avatar Sep 30 '2021 20:09 da jowkar