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?

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.


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(); 

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


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();

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

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

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

Ich habe verstanden, was du meinst. Vielen Dank!
Devhermluna

Was hast du bekommen?! So setzen Sie nicht lange ein Tag für Fragment
Farid
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.