2017-05-04 5 views
1

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

+0

hinzugefügt erstellen Objekt Ihrer Navigationsansicht und in onclick-Methode anwenden drawer.openDrawer (GravityCompat.START); –

+0

Standard-Aktionsleiste aus dem Layout entfernen, wenn Sie möchten, –

+0

@AashutoshKumar sollte ich die Schublade setzen. OpenDrawer (GravityCompat.START); auf meiner Dashboard-Aktivität? Ich habe die Standardaktionsleiste bereits aus meinem Layout entfernt. – natsumiyu

Antwort

1

erweitere ich meine NavigationActivity meinen DashboardActivity wie unter

public class DashboardActivity extends NavigationActivity { 

    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) { 
      side_tab.setVisibility(View.INVISIBLE); 
      drawer.openDrawer(GravityCompat.START); 
     } 
    }); 

und dann den genannten folgen beantwortet von @Hassan Usman und @tahsinRupam

nach, dass ich die DrawerLayout in meinem dashboard.xml

1

hinzufügen den folgenden Code in NavigationActivity:

DrawerLayout mDrawerLayout; // Declare globally 

In onCreate():

mDrawerLayout = (DrawerLayout) findViewById(R.id.nav_drawer); 
expanded_menu = (ImageView) side_tab.findViewById(R.id.expanded_menu); 
expanded_menu.setOnClickListener(new View.OnClickListener(){ 
     public void onClick(View v) { 
      // open drawer here 
      mDrawerLayout.openDrawer(Gravity.LEFT); 
     } 
    }); 

Wenn die Schublade geöffnet ist, schließen Sie es onBackPressed():

@Override 
public void onBackPressed() { 
    if (mDrawerLayout.isDrawerOpen(Gravity.LEFT)) { 
     mDrawerLayout.closeDrawer(Gravity.LEFT); 
     return; 
    } 
} 

Hoffe das hilft.

2

Fügen Sie diese in Ihrem NavigationActivity

public class NavigationActivity extends AppCompatActivity 
     implements NavigationView.OnNavigationItemSelectedListener { 

//Add this line 
    public static DrawerLayout drawer; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_navigation); 

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

Und das nächste Änderung

expanded_menu.setOnClickListener(new View.OnClickListener(){ 
      public void onClick(View v) { 
       // open drawer here 
       NavigationActivity. drawer.openDrawer(GravityCompat.START); 
     } 
    }); 

diese Hoffnung Probieren Sie es Ihre problrm lösen.

+0

Ich habe einen Fehler 'java.lang.NullPointerException: Versuch, virtuelle Methode aufzurufen 'void android.support.v4.widget.DrawerLayout.openDrawer (int)' auf eine Null-Objekt-Referenz ' – natsumiyu

+0

Ihr Schubladenobjekt ist Null, überprüfen Es ist richtig, warum es Null ist? – HassanUsman

+0

@mori überprüfe meine Antwort jetzt. – HassanUsman

Verwandte Themen