2016-05-10 1 views
0

Я использую MaterialDrawer и код MainActivity является:Почему не работает ClickListeners для панели инструментов?

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); 
    } 
} 

Я пытаюсь проследить Нажмите в mToolbar.setNavigationOnClickListener и withOnDrawerNavigationListener и onOptionsItemSelected. Ни один из слушателей не отреагировал на нажатие.

Как вы видите, я использую Activity, который запускает Fragment (1), что, в свою очередь, позволяет Fragment (2 и 3). В 2 и 3 Fragment в OnCreate я использую ((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);, и мне нужно, нажав на кнопку назад (на панели инструментов), возвращая предыдущий фрагмент, а не открытым Выдвижные

ответ

1

MaterialDrawer уже обрабатывает всех слушателей. Если вам нужно выполнить действие после того, как ящик открывается или закрывается вы можете предоставить слушатель через DrawerBuilder

значка у вас есть этот приемник: OnDrawerNavigationListener https://github.com/mikepenz/MaterialDrawer/blob/develop/library/src/main/java/com/mikepenz/materialdrawer/DrawerBuilder.java#L1158

Для ящика закрытия/открытие этого слушателя: OnDrawerListener https://github.com/mikepenz/MaterialDrawer/blob/develop/library/src/main/java/com/mikepenz/materialdrawer/DrawerBuilder.java#L1116

+0

Вау, Майк! Привет, и спасибо за ответ, но, может быть, я ошибаюсь, чтобы выразить это. Мне нужно быть на фрагменте 2 и 3, нажав кнопку «Назад» (на панели инструментов, которая меняется с гамбургером на стрелке) назад к предыдущему фрагменту и не открывал ящик. Я понял, что все слушатели нашли, но никто из них не работает, когда вы нажимаете стрелку назад. – abbath0767

+0

Как вы определили стрелку назад? Вы проверили, инициировано ли домашнее событие во фрагменте вместо активности? – mikepenz

+0

в фрагменте в onCreate i use ((AppCompatActivity) getActivity()). GetSupportActionBar(). SetDisplayHomeAsUpEnabled (true); для определения обратной стрелки – abbath0767

0

Я предлагаю вам создать новый Activity с помощью андроида мастера студии. Файл-> Создать-> Активность-> Активность навигационного ящика. В этом случае ActionBarDrawerToaggle используется

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

Этот переключатель содержит кнопку слушателю, который обрабатывать открытия/закрытия функциональность ящик для вас. Кроме того, вы можете использовать этот элемент через OnNavigationItemSelectedListener.onNavigationItemSelected(MenuItem item)

+0

, когда я использовал стандартную DrawerLayout (не MikePenz Library) - не было никаких проблем, и все было правильно работать – abbath0767