Bagaimana cara mengatur tag Fragmen dengan kode?

137

Saya belum menemukan sesuatu seperti setTag(String tagName)metode di Fragmentkelas. Satu-satunya cara untuk menyetel Fragmenttag yang saya temukan adalah dengan melakukan FragmentTransactiondan meneruskan nama tag sebagai parameter.

Apakah ini satu-satunya cara untuk menyetel Fragmenttag dengan kode secara eksplisit ?

Axel M. Garcia
sumber

Jawaban:

118

Iya. Jadi satu-satunya cara adalah pada saat transaksi, misalnya menggunakan add, replaceatau sebagai bagian dari tata letak.

Saya menentukan ini melalui pemeriksaan sumber kompatibilitas karena saya secara singkat mencari yang serupa di beberapa titik di masa lalu.

PJL
sumber
2
Jawaban Anda ada [di sini] [1] dalam pos di stackoverflow [1]: stackoverflow.com/questions/9363072/android-set-fragment-id
SME
2
Gunakan add FragmentTransaction (int containerViewId, Fragment fragment, String tag) seperti yang dijelaskan di sini: stackoverflow.com/a/13244471/4002895 @PJL Harap edit jawaban Anda. Jawaban ini menyesatkan orang
dasar
Itu sangat merepotkan.
Ian Wambai
75

Anda dapat menyetel tag menjadi fragmen dengan cara ini:

Fragment fragmentA = new FragmentA();
getFragmentManager().beginTransaction()
    .replace(R.id.MainFrameLayout,fragmentA,"YOUR_TARGET_FRAGMENT_TAG")
    .addToBackStack("YOUR_SOURCE_FRAGMENT_TAG").commit(); 
David
sumber
7
Di mana saya menggunakan kode ini? Di getItem di FragmentPagerAdapter?
Dr.jacky
35

Anda dapat memberikan tag di dalam file xml tata letak aktivitas Anda.

Sediakan android:tag attributestring unik.

Sama seperti Anda akan menetapkan id dalam layout xml.

    android:tag="unique_tag"

tautan ke panduan pengembang

Kuool
sumber
33
Itu akan berhasil jika seseorang menggunakan file layout. Tapi pertanyaan ini merujuk pada pengaturan tag secara dinamis di Java.
IgorGanapolsky
1
ini adalah jawaban yang saya butuhkan karena terkadang saat menggunakan beberapa perpustakaan, Anda tidak memiliki kendali atas transaksi fragmen sehingga Anda tidak dapat menyetel tag secara terprogram. Terima kasih!
RJFares
3

Anda juga bisa mendapatkan semua fragmen seperti ini:

Untuk fragmet v4

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

Untuk app.fragment

List<Fragment> allFragments = getFragmentManager().getFragments();
Chris Fremgen
sumber
1

Ini adalah cara terbaik yang saya temukan:

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

Saya tahu ini sudah 6 tahun yang lalu tetapi jika ada yang menghadapi masalah yang sama lakukan seperti yang saya lakukan:

Buat FragmentKelas khusus dengan bidang tag:

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

Sebelum menambahkan fragmen ke sectionPagerAdapterset tag seperti itu:

 MyFragment mfrag= new MyFragment();
 mfrag.setMyTag("TAG_GOES_HERE");
 sectionPagerAdapter.AddFragment(mfrag);
Th3Wolf
sumber
Pertanyaannya bukan tentang menyetel properti di Fragmen. Itu tentang bisa mengambil instance Fragment yang ada tanpa menyimpan referensi .
mkuech
-22

Anda dapat menambahkan tag sebagai properti untuk Fragmentargumen. Ini akan secara otomatis dipulihkan jika fragmen dihancurkan dan kemudian dibuat ulang oleh OS .

Contoh : -

    final Bundle args = new Bundle();
    args.putString("TAG", "my tag");
    fragment.setArguments(args);
farid_z
sumber
Aku mengerti maksudmu. Terima kasih!
utara
Apa yang kamu dapatkan?! Bukan itu cara Anda menyetel tag untuk Fragmen, bukan dengan cara yang lama
Farid