Come impostare un tag Fragment per codice?


137

Non ho trovato qualcosa di simile al setTag(String tagName)metodo in Fragmentclasse. L'unico modo per impostare un Fragmenttag che ho trovato è fare un FragmentTransactione passare un nome di tag come parametro.

È l'unico modo per impostare esplicitamente un Fragmenttag per codice?

Risposte:


118

Sì. Quindi l'unico modo è in fase di transazione, ad esempio utilizzando add, replaceo come parte del layout.

L'ho determinato attraverso un esame delle fonti di compatibilità, in quanto ho cercato brevemente simili ad un certo punto in passato.


2
La tua risposta si trova [qui] [1] nel post su stackoverflow [1]: stackoverflow.com/questions/9363072/android-set-fragment-id
PMI

2
Add Usa FragmentTransaction (int containerViewId, Fragment frammento, String tag) come descritto qui: stackoverflow.com/a/13244471/4002895 @PJL Modifica il tuo answer.This rispondere fuorviante persone
dasar

È piuttosto scomodo.
Ian Wambai,

75

Puoi impostare il tag su frammento in questo modo:

Fragment fragmentA = new FragmentA();
getFragmentManager().beginTransaction()
    .replace(R.id.MainFrameLayout,fragmentA,"YOUR_TARGET_FRAGMENT_TAG")
    .addToBackStack("YOUR_SOURCE_FRAGMENT_TAG").commit(); 

7
Dove uso questo codice? In getItem in FragmentPagerAdapter?
Dr.jacky,

35

È possibile fornire un tag all'interno del file xml del layout delle attività.

Fornisci android:tag attributeuna stringa univoca.

Proprio come assegneresti un ID in un layout xml.

    android:tag="unique_tag"

collegamento alla guida per gli sviluppatori


33
Funzionerebbe se si utilizzava un file di layout. Ma questa domanda si riferisce all'impostazione dinamica del tag in Java.
IgorGanapolsky,

1
questa era la risposta di cui avevo bisogno perché a volte mentre si utilizzano alcune librerie, non si ha il controllo sulle transazioni dei frammenti, quindi non è possibile impostare il tag a livello di programmazione. Grazie!
RJFares

3

Puoi anche ottenere tutti i frammenti in questo modo:

Per fragmets v4

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

Per app.fragment

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

0

Questo è il modo migliore che ho trovato:

   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");
        }
    }
}

-1

So che è stato 6 anni fa, ma se qualcuno si trova ad affrontare lo stesso problema, come ho fatto io:

Crea una Fragmentclasse personalizzata con un campo tag:

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

Prima di aggiungere il frammento al sectionPagerAdapterset il tag in questo modo:

 MyFragment mfrag= new MyFragment();
 mfrag.setMyTag("TAG_GOES_HERE");
 sectionPagerAdapter.AddFragment(mfrag);

La domanda non riguardava l'impostazione di una proprietà su un frammento. Si trattava di riuscire a recuperare un'istanza di frammento esistente senza tenere un riferimento .
mkuech,

-22

È possibile aggiungere il tag come proprietà per gli Fragmentargomenti. Verrà ripristinato automaticamente se il frammento viene distrutto e ricreato dal sistema operativo .

Esempio : -

    final Bundle args = new Bundle();
    args.putString("TAG", "my tag");
    fragment.setArguments(args);

Ho capito cosa intendi. Grazie!
devhermluna,

Cosa hai preso?! Non è così che hai impostato un tag per Fragment non da un colpo lungo
Farid
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.