Wie setze ich ein Fragment-Tag per Code?

137

Ich habe so etwas wie eine setTag(String tagName)Methode in der FragmentKlasse nicht gefunden . Die einzige Möglichkeit, ein gefundenes FragmentTag festzulegen, besteht darin FragmentTransaction, einen Tag-Namen als Parameter zu übergeben.

Ist dies die einzige Möglichkeit, ein FragmentTag explizit per Code festzulegen?

Axel M. Garcia
quelle

Antworten:

118

Ja. So ist die einzige Art und Weise zu Transaktions Zeit ist, zum Beispiel unter Verwendung von add, replaceoder als Teil des Layouts.

Ich habe dies durch eine Untersuchung der Kompatibilitätsquellen festgestellt, da ich irgendwann in der Vergangenheit kurz nach ähnlichen gesucht habe.

PJL
quelle
2
Ihre Antwort liegt [hier] [1] im Beitrag zu stackoverflow [1]: stackoverflow.com/questions/9363072/android-set-fragment-id
SME
2
Verwenden Sie das Add von FragmentTransaction (int containerViewId, Fragment fragment, String tag) wie hier beschrieben: stackoverflow.com/a/13244471/4002895 @PJL Bitte bearbeiten Sie Ihre Antwort. Diese Antwort führt irreführende Personen
dasar
Das ist ziemlich unpraktisch.
Ian Wambai
75

Sie können das Tag folgendermaßen auf Fragment setzen:

Fragment fragmentA = new FragmentA();
getFragmentManager().beginTransaction()
    .replace(R.id.MainFrameLayout,fragmentA,"YOUR_TARGET_FRAGMENT_TAG")
    .addToBackStack("YOUR_SOURCE_FRAGMENT_TAG").commit(); 
David
quelle
7
Wo verwende ich diesen Code? In getItem in FragmentPagerAdapter?
Dr.jacky
35

Sie können ein Tag in Ihrer XML-Datei für das Aktivitätslayout bereitstellen.

Versorge das android:tag attributemit einer einzigartigen Schnur.

So wie Sie eine ID in einer Layout-XML zuweisen würden.

    android:tag="unique_tag"

Link zum Entwicklerhandbuch

Kuool
quelle
32
Das würde funktionieren, wenn man eine Layoutdatei verwenden würde. Diese Frage bezieht sich jedoch auf das dynamische Setzen des Tags in Java.
IgorGanapolsky
1
Dies war die Antwort, die ich brauchte, da Sie manchmal bei der Verwendung einiger Bibliotheken keine Kontrolle über Fragmenttransaktionen haben und das Tag nicht programmgesteuert festlegen können. Vielen Dank!
RJFares
3

Sie können auch alle Fragmente wie folgt erhalten:

Für v4 fragmets

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

Für app.fragment

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

Dies ist der beste Weg, den ich gefunden habe:

   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
quelle
-1

Ich weiß, dass es 6 Jahre her ist, aber wenn jemand vor dem gleichen Problem steht, mache ich es wie folgt:

Erstellen Sie eine benutzerdefinierte FragmentKlasse mit einem Tag-Feld:

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

Bevor Sie das Fragment zum sectionPagerAdapterSet hinzufügen, setzen Sie das Tag einfach so:

 MyFragment mfrag= new MyFragment();
 mfrag.setMyTag("TAG_GOES_HERE");
 sectionPagerAdapter.AddFragment(mfrag);
Th3Wolf
quelle
Bei der Frage ging es nicht darum, eine Eigenschaft für ein Fragment festzulegen. Es ging darum, eine vorhandene Fragmentinstanz abrufen zu können, ohne eine Referenz zu behalten .
25.
-22

Sie können das Tag als Eigenschaft für die FragmentArgumente hinzufügen . Es wird automatisch wiederhergestellt, wenn das Fragment zerstört und dann vom Betriebssystem neu erstellt wird .

Beispiel : -

    final Bundle args = new Bundle();
    args.putString("TAG", "my tag");
    fragment.setArguments(args);
farid_z
quelle
Ich habe verstanden, was du meinst. Vielen Dank!
Devhermluna
Was hast du bekommen?! So setzen Sie nicht lange ein Tag für Fragment
Farid