2016-06-29 10 views
0

Hallo, ich habe dieses Problem mit meiner Navigationsschublade. Die Schublade öffnet sich gut, aber ich habe Probleme mit dem OnClickListener. Wenn ein Gegenstand in der Schublade angeklickt wird, wird das zugehörige Layout nicht angezeigt, wenn eine schwarze Seite angezeigt wird. Bitte helfenNavigationsschublade Fragment Ausgabe

home.java 

import android.app.FragmentManager; 
import android.app.FragmentTransaction; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.AsyncTask; 
import android.support.design.widget.NavigationView; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.support.v7.widget.Toolbar; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.SubMenu; 
import android.view.View; 
import android.widget.Toast; 

public class home extends AppCompatActivity { 

    //Defining Variables 
    private Toolbar toolbar; 
    private NavigationView navigationView; 
    private DrawerLayout drawerLayout; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_home); 

     // Initializing Toolbar and setting it as the actionbar 
     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     //Initializing NavigationView 
     navigationView = (NavigationView) findViewById(R.id.navigation_view); 

     //Setting Navigation View Item Selected Listener to handle the item click of the navigation menu 
     navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 

      // This method will trigger on item Click of navigation menu 
      @Override 
      public boolean onNavigationItemSelected(MenuItem menuItem) { 


       //Checking if the item is in checked state or not, if not make it in checked state 
       if(menuItem.isChecked()) menuItem.setChecked(false); 
       else menuItem.setChecked(true); 

       //Closing drawer on item click 
       drawerLayout.closeDrawers(); 

       //Check to see which item was being clicked and perform appropriate action 
       switch (menuItem.getItemId()){ 


        //Replacing the main content with ContentFragment Which is our Inbox View; 
        case R.id.dashboard: 
         Toast.makeText(getApplicationContext(),"dashboard",Toast.LENGTH_SHORT).show(); 
         Dashboard fragment = new Dashboard(); 
         android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
         fragmentTransaction.replace(R.id.frame,fragment); 
         fragmentTransaction.commit(); 
         break; 

        // For rest of the options we just show a toast on click 

        case R.id.profile: 
         Toast.makeText(getApplicationContext(),"profile",Toast.LENGTH_SHORT).show(); 
         new Profile(); 
         break; 
        case R.id.logs: 
         Toast.makeText(getApplicationContext(),"logs",Toast.LENGTH_SHORT).show(); 
         new Logs(); 
         break; 
        case R.id.statements: 
         Toast.makeText(getApplicationContext(),"statements",Toast.LENGTH_SHORT).show(); 
         new Statements(); 
         break; 
        case R.id.timeline: 
         Toast.makeText(getApplicationContext(),"timeliine",Toast.LENGTH_SHORT).show(); 
         new Timeline(); 
         break; 
        case R.id.settings: 
         Toast.makeText(getApplicationContext(),"settings",Toast.LENGTH_SHORT).show(); 
         new Settings(); 
         break; 

        default: 
         Toast.makeText(getApplicationContext(),"Somethings Wrong",Toast.LENGTH_SHORT).show(); 
         break; 

       } 
      return true; } 
     }); 

     // Initializing Drawer Layout and ActionBarToggle 
     drawerLayout = (DrawerLayout) findViewById(R.id.drawer); 
     ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(this,drawerLayout,toolbar,R.string.openDrawer, R.string.closeDrawer){ 

      @Override 
      public void onDrawerClosed(View drawerView) { 
       // Code here will be triggered once the drawer closes as we dont want anything to happen so we leave this blank 
       super.onDrawerClosed(drawerView); 
      } 

      @Override 
      public void onDrawerOpened(View drawerView) { 
       // Code here will be triggered once the drawer open as we dont want anything to happen so we leave this blank 

       super.onDrawerOpened(drawerView); 
      } 
     }; 

     //Setting the actionbarToggle to drawer layout 
     drawerLayout.setDrawerListener(actionBarDrawerToggle); 

     //calling sync state is necessay or else your hamburger icon wont show up 
     actionBarDrawerToggle.syncState(); 






    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, 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); 
    } 
} 

Antwort

0

Sie sind nicht Fragmente richtig in Ihren case Aussagen wechseln. Sie instanziieren nur eine neue Fragment-Klasse und tun nichts damit. Sie brauchen so etwas wie dies zu tun:

Fragment fragment; 
switch (menuItem.getItemId()){ 


       //Replacing the main content with ContentFragment Which is our Inbox View; 
       case R.id.dashboard: 
        Toast.makeText(getApplicationContext(),"dashboard",Toast.LENGTH_SHORT).show(); 
        fragment = new Dashboard(); 
        break; 

       // For rest of the options we just show a toast on click 

       case R.id.profile: 
        Toast.makeText(getApplicationContext(),"profile",Toast.LENGTH_SHORT).show(); 
        fragment = new Profile(); 
        break; 
       case R.id.logs: 
        Toast.makeText(getApplicationContext(),"logs",Toast.LENGTH_SHORT).show(); 
        fragment = new Logs(); 
        break; 
       case R.id.statements: 
        Toast.makeText(getApplicationContext(),"statements",Toast.LENGTH_SHORT).show(); 
        fragment = new Statements(); 
        break; 
       case R.id.timeline: 
        Toast.makeText(getApplicationContext(),"timeliine",Toast.LENGTH_SHORT).show(); 
        fragment = new Timeline(); 
        break; 
       case R.id.settings: 
        Toast.makeText(getApplicationContext(),"settings",Toast.LENGTH_SHORT).show(); 
        fragment = new Settings(); 
        break; 

       default: 
        Toast.makeText(getApplicationContext(),"Somethings Wrong",Toast.LENGTH_SHORT).show(); 
        break; 

      } 
android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
        fragmentTransaction.replace(R.id.frame,fragment); 
        fragmentTransaction.commit(); 

Auf diese Weise Sie jedes Mal ein Fragment mit einem geeigneten Fragment Klasse instanziiert wird, und am Ende des Rahmens mit diesem speziellen Fragment zu ersetzen.

Digresion: Es wird empfohlen, dass Sie newInstance verwenden, um die Fragmente und nicht den Konstruktor zu erhalten. Dies ist bekannt als Singleton Entwurfsmuster.

+0

Okay großartig, es funktioniert jetzt gut. Auch, wenn ich die Farbe ändern möchte, wenn ein Element ausgewählt ist (ich meine überprüft) wie Farbüberlagerung –

+0

Kein Problem Mate. Sie können herausfinden, wie Sie das tun, indem Sie es googlen oder auf [diese Frage] verweisen (http://stackoverflow.com/questions/22374660/navigation-drawer-item-background-colour-for-sected-item). – Vucko