web-dev-qa-db-fra.com

Événement onClick dans le tiroir de navigation

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?

11
Alpit Anand

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()
}
23
Grzegorz

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);
    }
1
sohaib karim

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);
1
ShekharKG

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;
}
1
Rahul Giradkar

É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.

0
Dinesh Kc