J'essaie de développer une application à l'aide du modèle de tiroir de navigation d'Android Studio. J'ai donc créé un nouveau projet en utilisant ce modèle. Mais lorsque je lance le programme et clique sur un élément de menu, la vue ne change pas. J'ai cherché partout sur Internet, mais je n'ai pas vu comment je peux gérer ça.
C'est le code fourni par Android Studio:
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.nav_camara) {
} else if (id == R.id.nav_gallery) {
} else if (id == R.id.nav_slideshow) {
} else if (id == R.id.nav_manage) {
} else if (id == R.id.nav_share) {
} else if (id == R.id.nav_send) {
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
Ce que je veux réaliser est de remplacer la vue actuelle par la vue appropriée pour l'élément de menu sur lequel vous avez cliqué.
Fragment est-il le meilleur moyen de le faire ou dois-je créer une activité différente pour chaque élément de menu?
Dans votre cas, ajouter des fragments sera la meilleure solution.
créer un fragment BlankFragment.Java
public class BlankFragment extends Fragment {
public BlankFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_blank, container, false);
}
}
et créer fragment_black.xml
<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
tools:context="com.above_inc.shyam.drawer.BlankFragment">
<!-- TODO: Update blank fragment layout -->
<TextView
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:text="@string/hello_blank_fragment" />
</FrameLayout>
remplace maintenant ta méthode
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
Fragment fragment = null;
if (id == R.id.nav_camera) {
// Handle the camera action
fragment = new BlankFragment();
} else if (id == R.id.nav_gallery) {
} else if (id == R.id.nav_slideshow) {
} else if (id == R.id.nav_manage) {
} else if (id == R.id.nav_share) {
} else if (id == R.id.nav_send) {
}
if (fragment != null) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.frame_container, fragment).commit();
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
ajoutez le code ci-dessous dans votre content_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.above_inc.shyam.drawer.MainActivity"
tools:showIn="@layout/app_bar_main">
<FrameLayout
Android:id="@+id/frame_container"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
/>
</RelativeLayout>
vous pouvez également ajouter plus de fragments à d'autres options identiques à la caméra dans le code ci-dessus
Fragment sera le meilleur moyen si vous souhaitez que votre tiroir de navigation soit affiché sur l'écran suivant lorsque vous cliquez sur l'élément de menu.
Si vous voulez utiliser activité, le tiroir de navigation ne sera pas affiché, sauf si vous créez une BaseActivity qui étend le tiroir de navigation et l'utiliser partout. Dans ce cas, vous devez également modifier l’animation de la transition d’activité car une nouvelle activité apparaîtra après avoir cliqué sur le menu, ce qui peut paraître étrange.
Faites un clic droit sur votre projet -> Nouveau -> Fragment.
Modifiez le boîtier de l'interrupteur en conséquence.
@ Passiondroid'sanswer on n'utilise Fragments que si vous voulez que le tiroir de Navigation pour toutes les activités soit sur place.
À propos du démarrage d'une activité en cliquant sur l'élément de menu, dans l'une de mes applications, je suis ceci,
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
switch(id)
{
case R.id.nav_profile:
selection = 1;
intent = new Intent("Android.intent.action.WEB");
intent.putExtra("selection",selection);
startActivity(intent);
break;
case R.id.nav_books:
intent = new Intent("Android.intent.action.WEBD");
selection = 2;
intent.putExtra("selection",selection);
startActivity(intent);
break;
case R.id.fav_quotes:
intent = new Intent ("Android.intent.action.SHOWFAVTES");
selection = 3;
intent.putExtra("selection",selection);
startActivity(intent);
break;
default:
break;
}
Pour modifier et configurer l'élément de menu, vous pouvez trouver le fichier "activity_main_drawer.xml" sous res-> Menu.
Et au clic de chacun des éléments du menu, vous pouvez commencer une activité selon vos souhaits. Vous devez déclarer les activités dans votre fichier AndroidManifest.xml avant de l'utiliser.