J'ai un fragment dans une activité de groupe et je souhaite le remplacer par un autre fragment:
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();
Cela fonctionne bien quand il est fait en tant que projet séparé sans utiliser le groupe d'activité, tout fonctionne bien dans log cat car le contrôle va dans getview (), mais aucune vue n'est visible, aucune exception ne se produit, je veux que le fragment de détail du livre être remplacé par fragment de détail de section.
XML du fragment de détail de livre a pour identifiant book_description_fragment et xml pour le fragment de description de section a pour identifiant section_description_fragment.
Le code ci-dessus est dans la méthode onClick d'un élément. Je souhaite que lorsque l'utilisateur appuie sur un élément en mode de défilement horizontal, le fragment change.
Les fragments codés en dur en XML ne peuvent pas être remplacés. Si vous devez remplacer un fragment par un autre, vous devez d'abord les ajouter de manière dynamique.
Remarque: R.id.fragment_container est une présentation ou un conteneur de votre choix dans l'activité à laquelle vous apportez le fragment.
// Create new fragment and transaction
Fragment newFragment = new ExampleFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack if needed
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
// Commit the transaction
transaction.commit();
J'ai fait un Gist avec LA méthode parfaite pour gérer fragment _ {remplacement et cycle de vie.
Il ne fait que remplacer le fragment actuel par un nouveau, si ce n'est pas le même et s'il n'est pas en backstack (dans ce cas, il apparaîtra).
Il contient plusieurs options comme si vous vouliez que le fragment soit sauvegardé dans un backstack.
En utilisant cette activité et une seule activité, vous pouvez ajouter ceci à votre activité:
@Override
public void onBackPressed() {
int fragments = getSupportFragmentManager().getBackStackEntryCount();
if (fragments == 1) {
finish();
return;
}
super.onBackPressed();
}
Utilisez le code ci-dessous dans 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();
Utilisez ce code en utilisant 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();
j'espère que vous allez bien.Quand j'ai commencé à travailler avec Android Fragments
, alors j'avais également le même problème, alors j'ai lu quelque chose à propos de 1- Comment changer de fragment avec d'autres . 2- Comment ajouter fragment Fragment container
n'a pas de fragment.
puis après quelques travaux de R & D, j'ai créé une fonction qui m'aide dans de nombreux projets jusqu'à présent et j'utilise encore cette fonction simple.
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();
}
}
profitez de votre temps de code :)
Utilisez ViewPager. C'est un travail pour moi.
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);
}
});
En kotlin, vous pouvez faire:
// 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()
vous pouvez utiliser un code simple son travail pour la transaction
Fragment newFragment = new MainCategoryFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_frame_NavButtom, newFragment);
ft.commit();
Vous pouvez utiliser ce code
((AppCompatActivity) getActivity()).getSupportFragmentManager().replace(R.id.YourFrameLayout, new YourFragment()).commit();