Fragman etiketi koda göre nasıl ayarlanır?


137

Sınıfta setTag(String tagName)yöntem gibi bir şey bulamadım Fragment. FragmentBulduğum bir etiketi ayarlamanın tek yolu FragmentTransaction, parametre olarak bir etiket adı yapmak ve iletmektir.

Bir Fragmentetiketi koda göre açıkça ayarlamanın tek yolu bu mu?

Yanıtlar:


118

Evet. Tek yolu işlem zamanda Yani, örneğin kullanarak add, replaceya da düzenin bir parçası olarak.

Bunu, geçmişte bir noktada kısaca benzediğim için uyumluluk kaynaklarını inceleyerek belirledim.


2
Cevabınız stackoverflow [1] hakkındaki yayında [burada] [1] yer almaktadır: stackoverflow.com/questions/9363072/android-set-fragment-id
KOBİ

2
Kullanım FragmentTransaction ekleyelim (int containerViewId, Fragment parçası dize etiketi) burada açıklandığı şekilde: stackoverflow.com/a/13244471/4002895 @PJL Lütfen düzenlemek için cevap verir cevap insanları yanıltıcı
Dasar

Bu oldukça elverişsiz.
Ian Wambai

75

Etiketi şu şekilde parçalanacak şekilde ayarlayabilirsiniz:

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

7
Bu kodu nerede kullanmalıyım? FragmentPagerAdapter içinde getItem?
Dr.jacky

35

Etkinlik düzeni xml dosyanızın içine bir etiket sağlayabilirsiniz.

android:tag attributeBenzersiz bir dize kaynağı .

Tıpkı xml düzeninde bir kimlik atayacağınız gibi.

    android:tag="unique_tag"

geliştirici kılavuzuna bağlantı


33
Bir düzen dosyası kullanılıyorsa bu işe yarar. Ancak bu soru, etiketi Java'da dinamik olarak ayarlamayı ifade eder.
IgorGanapolsky

1
ihtiyacım olan cevap buydu, çünkü bazen bazı kütüphaneleri kullanırken parça işlemleri üzerinde kontrole sahip değilsiniz, böylece etiketi programlı olarak ayarlayamazsınız. Teşekkürler!
RJFares

3

Bunun gibi tüm parçaları da alabilirsiniz:

V4 fragmanları için

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

App.fragment için

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

0

Bu bulduğum en iyi yol:

   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

6 yıl önce olduğunu biliyorum ama aynı sorunla karşılaşan biri yaptığım gibi yapmak:

FragmentEtiket alanı olan özel bir Sınıf oluşturun :

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

Parçayı sectionPagerAdapterkümeye eklemeden önce etiketi şöyle:

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

Soru, bir Fragment üzerinde bir özellik ayarlamakla ilgili değildi. Bir referans tutmadan mevcut bir Fragment örneğini alabilmekle ilgiliydi .
mkuech

-22

Etiketi, Fragmentbağımsız değişkenler için bir özellik olarak ekleyebilirsiniz . Parçanın yok edilmesi ve daha sonra işletim sistemi tarafından yeniden oluşturulması durumunda otomatik olarak geri yüklenecektir .

Örnek : -

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

Ne demek istediğini anladım. Teşekkürler!
devhermluna

Ne aldın?! Fragment için etiketini uzun bir vuruşla değil, bu şekilde ayarladın
Farid
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.