Saya memiliki fragmen di dalam aktivitas grup dan saya ingin menggantinya dengan fragmen lain:
FragmentTransaction ft = getActivity().getFragmentManager().beginTransaction();
SectionDescriptionFragment bdf = new SectionDescriptionFragment();
ft.replace(R.id.book_description_fragment, bdf);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
Ini berfungsi dengan baik ketika dilakukan sebagai proyek terpisah tanpa menggunakan grup aktivitas, semuanya berfungsi dengan baik di log cat saat kontrol masuk ke dalam getview (), tetapi tidak ada tampilan yang terlihat, bahkan tidak ada pengecualian yang muncul, saya ingin fragmen detail buku ke diganti dengan fragmen detail bagian.
Xml fragmen detail buku memiliki id book_description_fragment dan xml untuk fragmen deskripsi bagian memiliki id section_description_fragment.
Kode di atas ada dalam metode onClick suatu item, saya ingin ketika pengguna mengetuk item dalam tampilan gulir horizontal, maka fragmennya berubah.
sumber
onCreateView()
. Jadi, seperti yang bisa Anda asumsikan, setiap referensi ke fragmen sebenarnya hilang di tingkat tampilan. Jadi, pada dasarnya Anda tidak dapat mengganti fragmen, tetapi Anda dapat secara manual menghapus tampilan yang sekarang ada di container dan meletakkan fragmen di sana jika diperlukan.Silakan lihat Pertanyaan ini
Anda hanya dapat mengganti " fragmen yang ditambahkan secara dinamis ".
Jadi, jika Anda ingin menambahkan fragmen dinamis, lihat contoh ini .
sumber
Saya telah membuat intisari dengan metode yang sempurna untuk mengelola penggantian fragmen dan siklus hidup .
Ini hanya mengganti fragmen saat ini dengan yang baru, jika tidak sama dan jika tidak di backstack (dalam hal ini akan meletuskannya).
Ini berisi beberapa opsi seolah-olah Anda ingin fragmen disimpan di backstack.
=> Lihat Intinya di sini
Menggunakan ini dan satu Aktivitas, Anda mungkin ingin menambahkan ini ke aktivitas Anda:
@Override public void onBackPressed() { int fragments = getSupportFragmentManager().getBackStackEntryCount(); if (fragments == 1) { finish(); return; } super.onBackPressed(); }
sumber
Gunakan kode di bawah ini di android.support.v4
FragmentTransaction ft1 = getFragmentManager().beginTransaction(); WebViewFragment w1 = new WebViewFragment(); w1.init(linkData.getLink()); ft1.addToBackStack(linkData.getName()); ft1.replace(R.id.listFragment, w1); ft1.commit();
sumber
Gunakan kode ini menggunakan v4
ExampleFragment newFragment = new ExampleFragment(); FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); // Replace whatever is in the fragment_container view with this fragment, // and add the transaction to the back stack so the user can navigate back transaction.replace(R.id.container, newFragment); transaction.addToBackStack(null); // Commit the transaction transaction.commit();
sumber
Gunakan ViewPager. Ini bekerja untuk saya.
final ViewPager viewPager = (ViewPager) getActivity().findViewById(R.id.vp_pager); button = (Button)result.findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { viewPager.setCurrentItem(1); } });
sumber
harap Anda baik-baik saja. ketika saya mulai bekerja dengan
Android Fragments
itu saya juga mengalami masalah yang sama kemudian saya membaca tentang 1- Cara mengganti fragmen dengan yang lain. 2- Bagaimana menambahkan fragmen ifFragment container
tidak memiliki fragmen.kemudian setelah beberapa R&D, saya membuat fungsi yang membantu saya dalam banyak Proyek sampai sekarang dan saya masih menggunakan fungsi sederhana ini.
public void switchFragment(BaseFragment baseFragment) { try { FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right); if (getSupportFragmentManager().findFragmentById(R.id.home_frame) == null) { ft.add(R.id.home_frame, baseFragment); } else { ft.replace(R.id.home_frame, baseFragment); } ft.addToBackStack(null); ft.commit(); } catch (Exception e) { e.printStackTrace(); } }
nikmati waktu kode Anda :)
sumber
Anda Dapat Menggunakan Kode Ini
((AppCompatActivity) getActivity()).getSupportFragmentManager().beginTransaction().replace(R.id.YourFrameLayout, new YourFragment()).commit();
atau Anda Dapat Menggunakan Kode Ini
YourFragment fragments=(YourFragment) getSupportFragmentManager().findFragmentById(R.id.FrameLayout); if (fragments==null) { getSupportFragmentManager().beginTransaction().replace(R.id.FrameLayout, new Fragment_News()).commit(); }
sumber
Di kotlin Anda dapat melakukan:
// instantiate the new fragment val fragment: Fragment = ExampleFragment() val transaction = supportFragmentManager.beginTransaction() transaction.replace(R.id.book_description_fragment, fragment) transaction.addToBackStack("transaction_name") // Commit the transaction transaction.commit()
sumber
Anda dapat menggunakan kode sederhana yang berfungsi untuk transaksi
Fragment newFragment = new MainCategoryFragment(); FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.replace(R.id.content_frame_NavButtom, newFragment); ft.commit();
sumber
Saya mengubah fragmen secara dinamis dalam kode baris tunggal.
Ini berfungsi di semua versi SDK dan androidx
saya menggunakan navigasi sebagai
BottomNavigationView
BottomNavigationView btn_nav; FragmentFirst fragmentFirst; FragmentSecond fragmentSecond; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_search); fragmentFirst = new FragmentFirst(); fragmentSecond = new FragmentSecond (); changeFragment(fragmentFirst); // at first time load the fragmentFirst btn_nav = findViewById(R.id.bottomNav); btn_nav.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) { switch(menuItem.getItemId()){ case R.id.menu_first_frag: changeFragment(fragmentFirst); // change fragmentFirst break; case R.id.menu_second_frag: changeFragment(fragmentSecond); // change fragmentSecond break; default: Toast.makeText(SearchActivity.this, "Click on wrong bottom SORRY!", Toast.LENGTH_SHORT).show(); } return true; } }); }
public void changeFragment(Fragment fragment) { getSupportFragmentManager().beginTransaction().replace(R.id.fragment_layout_changer, fragment).commit(); }
sumber
Ini akan berfungsi jika Anda mencoba mengubah fragmen dari fragmen lain.
Objects.requireNonNull(getActivity()).getSupportFragmentManager() .beginTransaction() .replace(R.id.home_fragment_container,new NewFragment())
CATATAN Seperti yang dinyatakan dalam jawaban di atas, Anda harus memiliki fragmen dinamis.
sumber