J'ai créé un tiroir de navigation dans Android dans lequel je veux implémenter onClick pour cela. C'est ma principale activité:
public class MainActivity extends AppCompatActivity {
private DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle aToggle;
private Toolbar toolbar;
private RecyclerView recyclerView;
private RecyclerAdapter recyclerAdapter;
private RecyclerView.Adapter adapter;
private NavigationView navigationView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer);
aToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.navig, R.string.open, R.string.Close);
navigationView = (NavigationView) findViewById(R.id.nav_view);
mDrawerLayout.addDrawerListener(aToggle);
toolbar = (Toolbar) findViewById(R.id.nav_action);
toolbar.setNavigationIcon(R.drawable.navig);
setSupportActionBar(toolbar);
aToggle.syncState();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
navigationView.setItemIconTintList(null);
recyclerView = (RecyclerView) findViewById(R.id.recycler);
recyclerAdapter = new RecyclerAdapter(getApplicationContext());
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(this, 2);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(recyclerAdapter);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (aToggle.onOptionsItemSelected(item)) {
return true;
}
return super.onOptionsItemSelected(item);
}}
Voici ma disposition XML pour l'activité:
<?xml version="1.0" encoding="utf-8"?>
<Android.support.v4.widget.DrawerLayout 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:id="@+id/drawer"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
tools:context="com.example.alpit.formula2.MainActivity">
<RelativeLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_marginStart="0dp"
Android:orientation="vertical">
<Android.support.v7.widget.RecyclerView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/recycler"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_marginTop="58dp"
Android:orientation="vertical"></Android.support.v7.widget.RecyclerView>
<Android.support.v7.widget.Toolbar
Android:id="@+id/nav_action"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="#EF6C00"
Android:orientation="vertical"
Android:theme="@style/ThemeOverlay.AppCompat.Dark"></Android.support.v7.widget.Toolbar>
</RelativeLayout>
<Android.support.design.widget.NavigationView
Android:id="@+id/nav_view"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_gravity="start"
Android:background="#FFA726"
app:menu="@menu/navigation_menu"
app:theme="@style/NavigationTheme">
</Android.support.design.widget.NavigationView>
</Android.support.v4.widget.DrawerLayout>
Voici mes éléments de menu:
<group
Android:id="@+id/gp1"
Android:checkableBehavior="single">
<item
Android:id="@+id/nav_maths"
Android:icon="@drawable/maths"
Android:title="Maths" />
<item
Android:id="@+id/nav_physics"
Android:icon="@drawable/physics"
Android:title="Physics" />
<item
Android:id="@+id/nav_chem"
Android:icon="@drawable/chem"
Android:title="Chemistry" />
<item
Android:id="@+id/EEE"
Android:icon="@drawable/lightbulb"
Android:title="Electronics Electrical" />
</group>
<group
Android:id="@+id/gp2"
Android:checkableBehavior="single">
<item
Android:id="@+id/unitconversion"
Android:icon="@drawable/unitconversion"
Android:title="Unit Conversion" />
<item
Android:id="@+id/Scientist"
Android:icon="@drawable/scientist"
Android:title="Scientist" />
<item
Android:id="@+id/favourite"
Android:icon="@drawable/favourite"
Android:title="Favourite" />
</group>
<group
Android:id="@+id/gp3"
Android:checkableBehavior="single">
<item
Android:id="@+id/Share"
Android:icon="@drawable/share"
Android:title="Share" />
<item
Android:id="@+id/Rate"
Android:icon="@drawable/rate"
Android:title="Rate" />
<item
Android:id="@+id/ads"
Android:icon="@drawable/ad"
Android:title="Remove Ads" />
<item
Android:id="@+id/aboutus"
Android:icon="@drawable/aboutus"
Android:title="About Us" />
</group>
</menu>
Le problème est que je ne suis pas en mesure de comprendre comment implémenter le onClick
dans le tiroir de navigation car il est rempli par la liste donnée par nous et non par aucun listView.
Comment puis-je implémenter onClick
sur les éléments du tiroir de navigation?
Vous devez ajouter implémente NavigationView.OnNavigationItemSelectedListener
public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener
et ajoutez la méthode
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
// Handle navigation view item clicks here.
switch (item.getItemId()) {
case R.id.nav_maths: {
//do somthing
break;
}
}
//close navigation drawer
mDrawerLayout.closeDrawer(GravityCompat.START);
return true;
}
méthode pour définir l'écouteur
private void setNavigationViewListener() {
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
}
méthode d'appel dans onCreate ()
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setNavigationViewListener()
}
dans votre
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (aToggle.onOptionsItemSelected(item)) {
return true;
}
return super.onOptionsItemSelected(item);
}}
ajoutez ces lignes:
switch (item.getItemId()) {
case R.id.nav_maths:
// your logic here.
return true;
case R.id.nav_physics:
//your logic here
return true;
default:
return super.onOptionsItemSelected(item);
}
Le code ci-dessous permet d'ajouter la bascule à DrawerLayout
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
Et pour ajouter un écouteur aux éléments du menu Navigation
implements NavigationView.OnNavigationItemSelectedListener
et remplacer la méthode ci-dessous
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if(id == R.id. nav_maths){
//Handle your stuff here
}
}
Ajouter le code ci-dessous à la méthode onCreate
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
Ajouter NavigationItemSelectedListener événement à nav_view
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
Implémentez votre activité avec NavigationView.OnNavigationItemSelectedListener
et ajoutez ce code pour l'élément de clic
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.nav_camera) {
// Handle the camera action
} 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;
}
Étape 1: Étend le NavigationView.OnNavigationItemSelectedListener
Sur votre activité Étape 2: Ensuite, il y aura une erreur, puis remplacez la méthode:
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
return false;
}
obtenez l'ID avec menuItem.getId()
. Et effectuez votre action selon vos besoins.
étape finale: Ajouter cette ligne dans onCreate navigationView.setNavigationItemSelectedListener(this);
C'est ça.