Je sais que ce type de question existe déjà, mais je n'ai toujours pas trouvé de réponse à cette question:
Voici ce que j'ai
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mNavigationDrawerFragment = (NavigationDrawerFragment)
getFragmentManager().findFragmentById(R.id.navigation_drawer);
mTitle = getTitle();
// Set up the drawer.
mNavigationDrawerFragment.setUp(
R.id.navigation_drawer,
(DrawerLayout) findViewById(R.id.drawer_layout));
}
@Override
public void onNavigationDrawerItemSelected(int position) {
// update the main content by replacing fragments
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.container, PlaceholderFragment.newInstance(position + 1))
.commit();
}
public void onSectionAttached(int number) {
switch (number) {
case 1:
break;
case 2:
break;
case 3:
break;
}
}
Et d'autres encore ici:
public static PlaceholderFragment newInstance(int sectionNumber) {
PlaceholderFragment fragment = new PlaceholderFragment();
Bundle args = new Bundle();
args.putInt(ARG_SECTION_NUMBER, sectionNumber);
fragment.setArguments(args);
return fragment;
}
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
return rootView;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
((MainActivity) activity).onSectionAttached(
getArguments().getInt(ARG_SECTION_NUMBER));
}
}
Je souhaite afficher un autre fragment à l'aide du bouton dans le tiroir de navigation. Je souhaite utiliser ce code, merci de ne pas m'envoyer de guides ou de tutoriels permettant de créer leurs propres tiroirs.
La question est: que faut-il mettre dans case 1:
case 2:
et case 3:
au cas où je voudrais ouvrir un autre fragment? Thanx.
Une dernière question:
Comment puis-je ajouter plus de fragments et de transactions? Cela ne fonctionne pas-
Fragment fragment = new MyFragment1();
Fragment frag = new MyFragment2();
FragmentManager fragmentManager = getFragmentManager();
switch(position) {
case 0:
fragment = new MyFragment1();
break;
case 1:
frag = new MyFragment2();
break;
}
fragmentManager.beginTransaction()
.replace(R.id.container, fragment).commit();
}
Vous devriez simplement mettre une instruction switch dans la méthode onNavigationDrawerItemSelected
.
Quelque chose comme ça devrait marcher:
public void onNavigationDrawerItemSelected(int position) {
// update the main content by replacing fragments
Fragment fragment;
FragmentManager fragmentManager = getFragmentManager(); // For AppCompat use getSupportFragmentManager
switch(position) {
default:
case 0:
fragment = new MyFragment1();
break;
case 1:
fragment = new MyFragment2();
break;
}
fragmentManager.beginTransaction()
.replace(R.id.container, fragment)
.commit();
}
Ceci est juste fait rapidement mais je pense que cela devrait fonctionner
J'ai résolu ce problème sur inflater
:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView;
switch(getArguments().getInt(ARG_SECTION_NUMBER)) {
case 1:
rootView = inflater.inflate(R.layout.fragment_obj_detail, container, false);
break;
case 2:
rootView = inflater.inflate(R.layout.fragment_obj_list, container, false);
break;
case 3:
rootView = inflater.inflate(R.layout.fragment_obj_list, container, false);
break;
case 4:
rootView = inflater.inflate(R.layout.fragment_about, container, false);
break;
default:
rootView = inflater.inflate(R.layout.fragment_obj_list, container, false);
}
return rootView;
}
Vous devez créer un bloc switch
à l'intérieur de onNavigationDrawerItemSelected(
) et utiliser le code déjà présent pour chaque case
mais avec Fragment
correspondant au lieu de PlaceholderFragment
. Maintenant, il contient un morceau de code générique pour ajouter une PlaceholderFragment
à la présentation, réutilisez-la à vos fins.
La réponse de DenisGl, est la bonne voie !!! En utilisant le membre de la classe, créé par défaut, vous pouvez basculer entre les différents composants du tiroir de navigation! dans la méthode onNavigationDrawerItemSelected
Voici l'exemple de code: /Cette méthode peut être laissée telle quelle! Il invoque automatiquement la classe PlaceholderFragment! /
@Override
public void onNavigationDrawerItemSelected(int position) {
// update the main content by replacing fragments
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.container, PlaceholderFragment.newInstance(position + 1))
.commit();
}
Cette méthode à la place, où vous entrez le Switch Case :
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = null;
rootView = inflater.inflate(R.layout.fragment_home, container, false);
switch(getArguments().getInt(ARG_SECTION_NUMBER)) {
case 1:
rootView = inflater.inflate(R.layout.fragment_home, container, false);
break;
case 2:
//rootView = inflater.inflate(R.layout.fragment_obj_list, container, false);
break;
case 3:
//rootView = inflater.inflate(R.layout.fragment_obj_list, container, false);
break;
case 4:
rootView = inflater.inflate(R.layout.fragment_info, container, false);
break;
}
return rootView;
}
Évidemment, vous devez appeler la mise en page pour chaque fragment qui nous intéresse!
Cela fonctionne à 100%, test pour vérifier!
Cela fonctionne dans Eclipse IDE
switch(getArguments().getInt(ARG_SECTION_NUMBER)) {
case 1:
rootView = inflater.inflate(R.layout.fragment_home, container, false);
break;
case 2:
//rootView = inflater.inflate(R.layout.fragment_obj_list, container, false);
break;
case 3:
//rootView = inflater.inflate(R.layout.fragment_obj_list, container, false);
break;
case 4:
rootView = inflater.inflate(R.layout.fragment_info, container, false);
break;
}
en fonction
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = null;
rootView = inflater.inflate(R.layout.fragment_home, container, false);
return rootView;
}