2017-02-17 2 views
6

Я сделал навигационный ящик в Android, в котором я хочу реализовать onClick для него. Это моя основная деятельность:onClick событие в навигационном ящике

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

}} 

Это мой XML макет для деятельности:

<?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> 

Это мои пункты меню:

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

Проблема в том, Я не могу понять, как реализовать onClick на навигаторе ионный ящик, поскольку он заполняется списком, данным нами не любым списком.

Как я могу реализовать onClick на элементах навигации?

+0

'как оно заселено список заданный нами не каким-либо списком, вы могли бы объяснить, что вы подразумеваете под этим? – Luciferangel

+1

Извините, я знаю, что эта строка будет ошибкой, после внедрения navigationView я просмотрел много учебников о них, все они были заполнены списком ListView, благодаря чему они могли легко получить местоположение щелкнутого элемента. Вот почему я добавил эту строку. –

ответ

12

вам нужно добавить реализует NavigationView.OnNavigationItemSelectedListener

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener 

и метод Add

@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; 
} 

метод для установки Слушатель

private void setNavigationViewListner() { 
    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
    navigationView.setNavigationItemSelectedListener(this); 
} 
Метод

вызова в OnCreate()

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setNavigationViewListener() 
} 
+0

Можете ли вы рассказать, как реализовать onClickListner в этом? –

+0

Я редактирую свое сообщение и добавляю метод добавления слушателя – Grzegorz

0

Ниже код для добавления тумблера 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); 

и добавить слушатель к пунктам меню Навигации

implements NavigationView.OnNavigationItemSelectedListener 

и переопределить ниже Метод

@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 
    } 
} 

Добавить ниже код в метод OnCreate

NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
navigationView.setNavigationItemSelectedListener(this); 
+0

Ничего не происходит, когда я это делаю. –

1

Добавить NavigationItemSelectedListener событие nav_view

NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
    navigationView.setNavigationItemSelectedListener(this); 

Реализуйте активность с NavigationView.OnNavigationItemSelectedListener

и добавьте этот код для пункта клик

@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; 
} 
+0

Я не использую framgents, поэтому я должен реализовать этот метод в каждом действии, или есть какой-то другой способ для него. Спасибо. –

+0

Да, вам нужно создать навигационное представление и написать его для каждого другого действия. Но это не лучшая практика. Используйте фрагмент, который будет хорошо для u, чтобы выполнить задачу ура. –

+0

Извините за поздний ответ, но ничего не происходит, когда я это делаю. –

0

в ваших

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if (aToggle.onOptionsItemSelected(item)) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 

}} 

добавить эти строки:

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); 
    } 
-2
fab=(FloatingActionButton)findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
} 
    } 
+0

Пожалуйста, добавьте некоторый контекст как для этого кода. Это улучшает качество вашего ответа! :) – Alex

Смежные вопросы