Я создал блок навигации в своем приложении, и он работает нормально. Я смог видеть список меню и взаимодействовать с ним. Затем я планировал использовать один и тот же блок навигации во всех действиях моего приложения, поэтому я расширил класс NavigationBar в своей функции MainActivity. .
После расширения его в базовом классе я могу видеть значок гамбургера в левой верхней части моей MainActivity, но когда я щелкаю по нему, он не открывает ящик.
Я много пробовал, но не смог найти проблему и запутался в том, что вызвало эту проблему? Здесь код ..
action_navigation_bar. xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.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:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/drawyerId"
tools:context=".MainActivity">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent">
<TextView
android:id="@+id/textview"
android:layout_width="65dp"
android:layout_height="16dp"
android:text="navbar"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<com.google.android.material.navigation.NavigationView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/navigationViewId"
app:menu="@menu/nav_menu"
android:layout_gravity="start"/>
</androidx.drawerlayout.widget.DrawerLayout>
Панель навигации. java
package com.security.navbartry;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.drawerlayout.widget.DrawerLayout;
import android.content.Intent;
import android.os.Bundle;
import android.view.MenuItem;
import android.widget.Toast;
import com.google.android.material.navigation.NavigationView;
public class NavigationBar extends AppCompatActivity implements
NavigationView.OnNavigationItemSelectedListener {
public ActionBarDrawerToggle mToggle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_navigation_bar);
DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.drawyerId);
NavigationView navigationView =(NavigationView)findViewById(R.id.navigationViewId);
mToggle=new ActionBarDrawerToggle(NavigationBar.this, mDrawerLayout,R.string.open,R.string.close);
mDrawerLayout.addDrawerListener(mToggle);
mToggle.syncState();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
navigationView.setNavigationItemSelectedListener(this);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
if(mToggle.onOptionsItemSelected(item))
{
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
int id = menuItem.getItemId();
if(id == R.id.listAppsId)
{
Toast.makeText(this, "app list clicked", Toast.LENGTH_LONG).show();
}
if(id == R.id.scanFilesId)
{
Toast.makeText(this, "file scan clicked", Toast.LENGTH_SHORT).show();
}
if(id == R.id.networkAccessId)
{
Toast.makeText(this, "network access clicked", Toast.LENGTH_SHORT).show();
}
if(id == R.id.restrictNetworkId)
{
Toast.makeText(this, "restrict network clicked", Toast.LENGTH_SHORT).show();
}
return false;
}
}
nav_menu. xml
Файл nav_menu находится в res-> menu
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/listAppsId"
android:title="App List"/>
<item android:id="@+id/scanFilesId"
android:title="File Scan" />
<item android:id="@+id/networkAccessId"
android:title="Network Access" />
<item android:id="@+id/restrictNetworkId"
android:title="Restrict Network" />
</menu>
MainActivity. java
package com.security.navbartry;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Window;
import com.google.android.material.navigation.NavigationView;
public class MainActivity extends NavigationBar {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}