Ich versuche, die Navigation Drawer Activity
auf meinem Dashboard Activity
zu implementieren. In meiner Anwendung habe ich ein Theme erstellt, bei dem die 'Toolbar/ActionBar' entfernt wurde und einfach ein ImageView
für mein Burger-Menü auf eine custom layout
gelegt und in mein Dashboard-Layout eingefügt wurde. Was ich wollte, ist, dass, wenn dieses ImageView
angeklickt wird, das gleitende Fach angezeigt wird.Wie öffne ich die Navigationsleiste, wenn ImageView angeklickt wird?
Was ich versucht habe, ist eine Navigation Drawer Activity
von com.project.projectname hinzufügen -> Neu -> Aktivität -> 'Navigation Drawer Activity' und automatisch fügt NavigationActivity class , activity_navigation.xml app_bar_navigation.xml, etc
hinzu.
Aber ich fragte mich, wie kann ich die Schublade öffnen? In meinem Dashboard Activity
habe ich dieses
public class DashboardActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dashboard);
View side_tab = findViewById(R.id.side_tab);
expanded_menu = (ImageView) side_tab.findViewById(R.id.expanded_menu);
expanded_menu.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
// open drawer here
}
});
Auch in NavigationActivity
verwendet es ActionBarDrawerToggle
, muss ich dies nicht verwenden, weil ich ein ActionBar
nicht gelten. Aber welche Alternative kann ich verwenden?
Hier ist meine NavigationActivity
public class NavigationActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_navigation);
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);
toggle.syncState();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
}
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.navigation, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
Intent goToSreen;
if (id == R.id.nav_dashboard) {
goToSreen = new Intent(NavigationActivity.this, DashboardActivity.class);
startActivity(goToSreen);
} else if (id == R.id.nav_others) {
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
}
Dank für Ihre Hilfe danken.
aktualisieren
Also in meinem Dashboard-Aktivität hinzugefügt ich die folgenden
NavigationActivity navigationActivity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dashboard);
View side_tab = findViewById(R.id.side_tab);
expanded_menu = (ImageView) side_tab.findViewById(R.id.expanded_menu);
expanded_menu.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
navigationActivity = new NavigationActivity() ;
navigationActivity.drawer.openDrawer(GravityCompat.START);
}
});
Und in meiner Navigation Aktivität ich eine globale Variable hinzufügen
public class NavigationActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
DrawerLayout drawer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_navigation);
drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
}
ich es geschafft haben, zu nennen Die drawer
in meiner Dashboard-Aktivität, aber das gleitende Menü wird immer noch nicht angezeigt als ich mein Burger-Menü angeklickt habe. Die App stürzt ab und zeigt java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.widget.DrawerLayout.openDrawer(int)' on a null object reference
hinzugefügt erstellen Objekt Ihrer Navigationsansicht und in onclick-Methode anwenden drawer.openDrawer (GravityCompat.START); –
Standard-Aktionsleiste aus dem Layout entfernen, wenn Sie möchten, –
@AashutoshKumar sollte ich die Schublade setzen. OpenDrawer (GravityCompat.START); auf meiner Dashboard-Aktivität? Ich habe die Standardaktionsleiste bereits aus meinem Layout entfernt. – natsumiyu