Veo en la Android Fragmentos Dev Guía que una «actividad puede llamar a los métodos de un fragmento de la adquisición de una referencia al Fragmento de FragmentManager, utilizando findFragmentById() o findFragmentByTag()

El ejemplo siguiente se muestra cómo obtener un fragmento de referencia, pero no se cómo llamar a los 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 de los padres. Gracias.

InformationsquelleAutor gcl1 | 2012-06-05

10 Comentarios

  1. 194

    no conseguir la pregunta exactamente como es muy simple :

    ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
    fragment.<specific_function_name>(); 

    Actualización:
    Para aquellos que están usando Kotlin

    var fragment = supportFragmentManager.findFragmentById(R.id.frameLayoutCW) as WebViewFragment
    fragment.callAboutUsActivity()
    • OK eso fue fácil, gracias (soy nuevo a fragmentos). Ahora la parte difícil, es que me parece que no puede obtener una referencia al fragmento en el primer lugar. No se define en un XML de diseño, así que no puedo usar findFragmentById(). Y no es claro para mí desde el código que estoy siguiendo (ref arriba) cómo/donde el fragmento es creado. Si se pudiera agregar una etiqueta y el uso findFragmentByTag(). El AccountListActivity parte del ejemplo se tiene una llamada a beginTransaction().add(), pero por mi huella nunca llama. Esto es donde estoy rascándome la cabeza. Agradezco cualquier sugerencia.
    • Lo siento, me fui de la referencia. El patrón de código estoy siguiendo es FragmentTabsPager. Gracias.
    • La situación será diferente cuando ni la u está teniendo el ID ni la ETIQUETA asociada con el fragmento .
    • ¿cómo puedo obtener el fragmento de identificación?
    • Al hacer esto terminó en una referencia de objeto null!
    • busque en su <fragmento de la etiqueta en el archivo xml. Usted debe tener una id de allí. Sería «example_fragment» para que coincida con el código del ejemplo dado.
    • ¿qué pasa si no tengo fragmento de la etiqueta?
    • estoy bastante seguro de que usted tiene que, @VaclovasRekašiusJr. ! busca a través de sus archivos XML
    • Yo no declarado fragmento de xml… así que no tengo fragmento de identificación, ¿Qué voy a hacer ??
    • En Kotlin utilizar dicha sintaxis para suprimir «este elenco nunca puede tener éxito» advertencia val fragm : MyFragment = fragmentManager.findFragmentById(R.id.my_fragment) as MyFragment

  2. 75

    Si usted está usando «import android.app.Fragmento;»
    A continuación, utilice:

    1)

    ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment); 
    fragment.specific_function_name(); 

    Donde R. id.example_fragment es más probable que el FrameLayout de identificación en el interior de su xml de diseño.
    O

    2)

    ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentByTag(“FragTagName”); 
    fragment.specific_function_name(); 

    Donde FragTagName es el nombre u especificado cuando u:

    TabHost mTabHost.newTabSpec(“FragTagName”)

    Si usted está usando «import android.apoyo.v4.app.Fragmento;»
    A continuación, utilice:

    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(); 
    • Tengo un CoordinatorLayout con id R. id.example_fragment, su devuelva null. Estoy usando import android.apoyo.v4.app.Fragmento; ¿qué hacer?
    • Yo te sugiero que escribas esto como una nueva pregunta e incluir su código de ejemplo. Es difícil saber el origen del problema sin ver el código real.
  3. 9

    Si usted está utilizando una biblioteca de soporte, usted querrá hacer algo como esto:

    FragmentManager manager = getSupportFragmentManager();
    Fragment fragment = manager.findFragmentById(R.id.my_fragment);
    fragment.myMethod();
  4. 4
    1. Si no estás usando una biblioteca de soporte Fragmento, a continuación, haga lo siguiente:

    ((FragmentName) getFragmentManager().findFragmentById(R.id.fragment_id)).methodName();


    2. Si estás usando una biblioteca de compatibilidad Fragmento, a continuación, haga lo siguiente:

    ((FragmentName) getSupportFragmentManager().findFragmentById(R.id.fragment_id)).methodName();

  5. 3

    Creo que lo mejor es comprobar si el fragmento se agrega antes de llamar al método en el fragmento. Hacer algo como esto para evitar null excepción.

    ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
    if(fragment.isAdded()){
      fragment.<specific_function_name>(); 
    }
  6. 1

    A partir de un fragmento de la actividad:

    ((YourActivityClassName)getActivity()).yourPublicMethod();

    De la actividad de fragmento:

    FragmentManager fm = getSupportFragmentManager();

    //if you added fragment via layout xml
    YourFragmentClass fragment = 
    (YourFragmentClass)fm.findFragmentById(R.id.your_fragment_id);
    fragment.yourPublicMethod();

    Si has añadido fragmento a través de código y se utiliza un etiqueta cadena cuando se añade su fragmento, el uso de findFragmentByTag lugar:

    YourFragmentClass fragment = (YourFragmentClass)fm.findFragmentByTag("yourTag");
  7. 1
    FragmentManager fm = getFragmentManager(); 
    MainFragment frag = (MainFragment)fm.findFragmentById(R.id.main_fragment); 
    frag.<specific_function_name>(); 
  8. 1

    también llamada fragmento utilizando el método de la interfaz como

    en primer lugar, crear la interfaz de

    public interface InterfaceName {
        void methodName();
    }

    después de la creación de la interfaz de implementar la interfaz en su fragmento

    MyFragment extends Fragment implements InterfaceName {
        @overide
        void methodName() {
    
        }
    }

    y crear la referencia de la interfaz en su actividad

    class Activityname extends AppCompatActivity {
        Button click;
        MyFragment fragment;
    
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity);
    
            click = findViewById(R.id.button);
    
            fragment = new MyFragment();
    
            click.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                   fragment.methodName();
                }
            });
        }
    }
  9. 0

    En primer lugar, crear el método en su fragment como

    public void name()
    {
    
    
    }

    en su activity agregar este

    agregar onCreate() método

    myfragment fragment=new myfragment()

    finalmente llamar al método con el que se desea llamar agregar este

    fragment.method_name();

    prueba este código

  10. 0

    Yo no sé acerca de Java, pero en C# (Xamarin.Android) no hay necesidad de buscar el fragmento cada vez que usted necesita para llamar al método, vea a continuación:

    public class BrandActivity : Activity
    {
        MyFragment myFragment;
    
        protected override void OnCreate(Bundle bundle)
        {       
            //...
            myFragment = new MyFragment();      
            //...
        }
    
        void someMethod()
        {
            myFragment.MyPublicMethod();
        }
    }
    
    public class MyFragment : Android.Support.V4.App.Fragment
    {
        public override void OnCreate(Bundle bundle)
        {
            //...
        }
    
        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle)
        {
            //...
        }
    
        public void MyPublicMethod()
        {
            //...
        }   
    }

    Creo que en Java usted puede hacer lo mismo.

Dejar respuesta

Please enter your comment!
Please enter your name here