2016-05-10 12 views
0

Ich benutze MaterialDrawer und Code MainActivity ist:Warum funktioniert ClickListeners nicht für Toolbar?

public class MainActivity extends AppCompatActivity implements KitchenFragment.CallbackOne { 
    public static final String TAG = "myLogTag"; 

    private Toolbar mToolbar; 
    private Drawer drawer; 
    private FragmentManager fm; 

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

     mToolbar = (Toolbar) findViewById(R.id.toolbar); 
     mToolbar.setNavigationOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Log.d(TAG, "CLICK NOCL"); 
      } 
     }); 
     setSupportActionBar(mToolbar); 
//  getSupportActionBar().setDisplayHomeAsUpEnabled(false); 


     fm = getFragmentManager(); 
     Fragment fragment = fm.findFragmentById(R.id.content_frame); 

     if (fragment == null) { 
      fragment = MenuFragment.newInstance(); 
      fm.beginTransaction() 
        .add(R.id.content_frame, fragment) 
        .commit(); 

     } 

     drawer = new DrawerBuilder() 
       .withActivity(this) 
       .withToolbar(mToolbar) 
       .withActionBarDrawerToggle(true) 
       .withHeader(R.layout.drawer_header) 
       .addDrawerItems(
         new PrimaryDrawerItem().withName(R.string.menu).withIdentifier(1), 
         new PrimaryDrawerItem().withName(R.string.kitchen_title).withIdentifier(2), 
         new PrimaryDrawerItem().withName(R.string.information_title).withEnabled(false) 
       ).withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() { 
        @Override 
        public boolean onItemClick(View view, int position, IDrawerItem drawerItem) { 
         Log.d(TAG, "position clicked: " + position); 
         Fragment fragment = MenuFragment.newInstance(); 
         switch (position) { 
          case 1: 
           fragment = MenuFragment.newInstance(); 
           break; 
          case 2: 
           fragment = KitchenFragment.newInstance(); 
           break; 
          default: 
           fragment = new Fragment(); 
         } 
         fm.beginTransaction().replace(R.id.content_frame, fragment).commit(); 
         return false; 
        } 
       }) 
       .withFireOnInitialOnClick(true) 
       .withSavedInstance(savedInstanceState) 
       .withOnDrawerNavigationListener(new Drawer.OnDrawerNavigationListener() { 
        @Override 
        public boolean onNavigationClickListener(View view) { 
         Log.d(TAG, "CLICK in DNL"); 
         if (!drawer.getActionBarDrawerToggle().isDrawerIndicatorEnabled()) { 
          onBackPressed(); 
          return true; 
         } else 
          return false; 
        } 
       }) 
       .build(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.menu_menu, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     Log.d(TAG, "CLICK OIS"); 
     switch (item.getItemId()) { 
      case R.id.action_settings: 
       return true; 
      case android.R.id.home: 
       getFragmentManager().popBackStackImmediate(); 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 

    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     outState = drawer.saveInstanceState(outState); 
     super.onSaveInstanceState(outState); 

    } 

    @Override 
    public void onBackPressed() { 
     if (drawer.isDrawerOpen()) 
      drawer.closeDrawer(); 
     else if (getFragmentManager().getBackStackEntryCount() == 1) { 
      getSupportActionBar().setDisplayHomeAsUpEnabled(false); 
      drawer.getActionBarDrawerToggle().syncState(); 
      getFragmentManager().popBackStack(); 
     } else if (getFragmentManager().getBackStackEntryCount() > 0) 
      getFragmentManager().popBackStack(); 
     else 
      super.onBackPressed(); 
    } 

    @Override 
    public void setFirstSelected() { 
     drawer.setSelection(1); 
    } 
} 

Ich versuche, ein Klick in mToolbar.setNavigationOnClickListener und withOnDrawerNavigationListener und onOptionsItemSelected zu verfolgen. Kein Zuhörer reagierte nicht auf Klicken.

Wie Sie sehen, verwende ich Activity, die Fragment (1) startet, die wiederum Fragment (2 und 3). In 2 und 3 Fragment in OnCreate i verwenden ((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);, und ich muß durch die Zurück-Taste drücken (in Symbolleiste), das vorherige Fragment zurückkehrt, und nicht offen Schublade

Antwort

1

implementiert Der MaterialDrawer behandelt bereits alle Listener für Sie. Wenn Sie eine Aktion tun müssen, nachdem die Schublade öffnet oder schließt man den Hörer über die DrawerBuilder liefern kann

Für das Symbol haben Sie diesen Listener: OnDrawerNavigationListener https://github.com/mikepenz/MaterialDrawer/blob/develop/library/src/main/java/com/mikepenz/materialdrawer/DrawerBuilder.java#L1158

Für Schublade öffnen/schließen diese Hörer: OnDrawerListenerhttps://github.com/mikepenz/MaterialDrawer/blob/develop/library/src/main/java/com/mikepenz/materialdrawer/DrawerBuilder.java#L1116

+0

Wow, Mike! Hallo, und vielen Dank für die Antwort, aber vielleicht habe ich es falsch ausgedrückt - ich muss auf einem Fragment von 2 und 3 sein, indem ich die Zurück-Taste (in der Symbolleiste, die mit einem Hamburger auf dem Pfeil ändert) zurück zum vorherigen Fragment und öffnete das Fach nicht. Ich erkannte, dass alle Zuhörer gefunden, aber keiner von ihnen funktioniert nicht, wenn Sie den Zurück-Pfeil drücken – abbath0767

+0

Wie haben Sie den Zurück Pfeil definiert? Sie haben überprüft, ob das Home-Ereignis im Fragment statt in der Aktivität ausgelöst wird? – mikepenz

+0

im Fragment in onCreate verwende ich ((AppCompatActivity) getActivity()). GetSupportActionBar(). SetDisplayHomeAsUpEnabled (true); zum definieren zurück pfeil – abbath0767

0

Ich schlage vor, Sie neue Activity mit Android Studio-Assistenten zu erstellen. Datei-> Neu-> Aktivität-> Navigationsschubladenaktivität. In diesem Fall ActionBarDrawerToaggle ist

ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 

umschalten enthält klicken Hörer verwendet, die für Sie zum Öffnen/Schließen Schublade Funktionalität handhaben. Sie können auch diese Element Klicks durch OnNavigationItemSelectedListener.onNavigationItemSelected(MenuItem item)

+0

wenn ich verwenden standart DrawerLayout (nicht MikePenz Library) - gibt es keine Probleme und alles funktioniert richtig – abbath0767