¿Cómo establecer una etiqueta Fragment por código?

137

No he encontrado algo como setTag(String tagName)método en la Fragmentclase. La única forma de establecer una Fragmentetiqueta que he encontrado es haciendo FragmentTransactiony pasando un nombre de etiqueta como parámetro.

¿Es esta la única forma de establecer explícitamente una Fragmentetiqueta por código?

Axel M. Garcia
fuente

Respuestas:

118

Si. Entonces, la única forma es en el momento de la transacción, por ejemplo add, usando ,replace , o como parte del diseño.

Determiné esto a través de un examen de las fuentes de compatibilidad, ya que busqué brevemente algo similar en algún momento en el pasado.

PJL
fuente
2
Su respuesta se encuentra [aquí] [1] en la publicación en stackoverflow [1]: stackoverflow.com/questions/9363072/android-set-fragment-id
SME
2
Complemento de uso FragmentTransaction (int containerViewId, fragmento Fragmento, cadena de etiqueta) como se describe aquí: stackoverflow.com/a/13244471/4002895 @PJL Edite su answer.This responder a engañar a la gente
Dasar
Eso es bastante inconveniente.
Ian Wambai
75

Puede configurar la etiqueta para fragmentar de esta manera:

Fragment fragmentA = new FragmentA();
getFragmentManager().beginTransaction()
    .replace(R.id.MainFrameLayout,fragmentA,"YOUR_TARGET_FRAGMENT_TAG")
    .addToBackStack("YOUR_SOURCE_FRAGMENT_TAG").commit(); 
David
fuente
77
¿Dónde uso este código? En getItem en FragmentPagerAdapter?
Dr.jacky
35

Puede proporcionar una etiqueta dentro de su archivo xml de diseño de actividad.

Suministrar el android:tag attributecon una cadena única.

Del mismo modo que asignaría una identificación en un diseño xml.

    android:tag="unique_tag"

enlace a la guía del desarrollador

Kuool
fuente
32
Eso funcionaría si uno estuviera usando un archivo de diseño. Pero esta pregunta se refiere a configurar dinámicamente la etiqueta en Java.
IgorGanapolsky
1
Esta fue la respuesta que necesitaba porque, a veces, al usar algunas bibliotecas, no tiene control sobre las transacciones fragmentadas, por lo que no puede configurar la etiqueta mediante programación. ¡Gracias!
RJFares
3

También puede obtener todos los fragmentos como este:

Para fragmentos v4

List<Fragment> allFragments = getSupportFragmentManager().getFragments();

Para fragmento de aplicación

List<Fragment> allFragments = getFragmentManager().getFragments();
Chris Fremgen
fuente
0

Esta es la mejor manera que he encontrado:

   public class MainActivity extends AppCompatActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (savedInstanceState == null) {
          // Let's first dynamically add a fragment into a frame container
          getSupportFragmentManager().beginTransaction(). 
              replace(R.id.flContainer, new DemoFragment(), "SOMETAG").
              commit();
          // Now later we can lookup the fragment by tag
          DemoFragment fragmentDemo = (DemoFragment) 
              getSupportFragmentManager().findFragmentByTag("SOMETAG");
        }
    }
}
Kingsley Mitchell
fuente
-1

Sé que ha sido hace 6 años, pero si alguien se enfrenta al mismo problema, haga lo que hice:

Cree una Fragmentclase personalizada con un campo de etiqueta:

public class MyFragment extends Fragment {
 private String _myTag;
 public void setMyTag(String value)
 {
   if("".equals(value))
     return;
   _myTag = value;
 }
 //other code goes here
}

Antes de agregar el fragmento al sectionPagerAdapterconjunto, la etiqueta simplemente así:

 MyFragment mfrag= new MyFragment();
 mfrag.setMyTag("TAG_GOES_HERE");
 sectionPagerAdapter.AddFragment(mfrag);
Th3Wolf
fuente
La pregunta no era sobre establecer una propiedad en un Fragmento. Se trataba de poder recuperar una instancia de Fragment existente sin tener una referencia .
mkuech
-22

Puede agregar la etiqueta como una propiedad para los Fragmentargumentos. Se restaurará automáticamente si el fragmento se destruye y luego el SO lo vuelve a crear .

Ejemplo :

    final Bundle args = new Bundle();
    args.putString("TAG", "my tag");
    fragment.setArguments(args);
farid_z
fuente
Tengo lo que quieres decir. ¡Gracias!
devhermluna
¡¿Qué obtuviste?! Así no es como se establece una etiqueta para Fragment, ni mucho menos
Farid