Toolbar上動態(tài)顯示Menu

最常見的是我們app的主頁面是由Viewpager嵌套Fragment葡盗,但當(dāng)我們需要在顯示不同F(xiàn)rragment的時候,Toolbar上的Menu也要隨之改變桃煎,我們總不能寫三個Toolbar跟三個Menu文件來實現(xiàn)吧组底,這樣也太low了。

first.png
second.png
third.png

那么怎么樣才能實現(xiàn)起來簡單能弊添,辦法肯定是有的,我們可不可以在Activity初始化的時候就把我們所要展示的所有Menu給初始化了捌木,然后我們再通過監(jiān)聽Viewpager的滑動頁面來對Menu進(jìn)行顯示隱藏呢油坝?沒錯,就是這個思路。這樣我們就只需布局一個Toolbar跟一個Menu文件即可免钻,豈不快哉!

我們知道初始化Menu的常用兩方法是onCreateOptionsMenu(Menu menu)onOptionsItemSelected(MenuItem item)前一個是創(chuàng)建Activity是回調(diào)方法用于填充Menu的布局崔拥,只會執(zhí)行一次极舔,后面的方法是我們處理Menu的item點擊事件的,這些比較常用就不過多介紹了链瓦。下面我要介紹的方法是onPrepareOptionsMenu(Menu menu)拆魏,該方法每顯示一次或調(diào)起一次Menu都會回調(diào)該方法,這就是我們實現(xiàn)該需求的關(guān)鍵方法慈俯,我們可以在該方法中實現(xiàn)Menu顯示隱藏的邏輯渤刃,再通過invalidateOptionsMenu()方法去刷新Menu從而回調(diào)onPrepareOptionsMenu(Menu menu),這就達(dá)到了我們想要的效果贴膘。

上面圖片的布局及Menu文件都很簡單卖子,因此省略。下面是Activiy里面的詳細(xì)代碼:

  public class MainActivity extends BaseActivity {

      private List<Fragment> list = new ArrayList<>();
      private int index = 0;

      @InjectView(R.id.navigation)
      BottomNavigationView navigation;
      @InjectView(R.id.vp)
      ViewPager vp;

      private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
        = new BottomNavigationView.OnNavigationItemSelectedListener() {

          @Override
          public boolean onNavigationItemSelected(@NonNull MenuItem item) {
              switch (item.getItemId()) {
                  case R.id.navigation_home:
                      index = 0;
                      reflushView();
                      return true;
                  case R.id.navigation_discover:
                      index = 1;
                      reflushView();
                      return true;
                  case R.id.navigation_talk:
                      index = 2;
                      reflushView();
                      return true;
              }
              return false;
          }

      };

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

          initView();
      }

      private void initView() {

          setGestureFinishEnable(false);
          finishOthersActivity();

          setTitle("房間");

          list.add(new RoomFragment());
          list.add(new DiscoverFragment());
          list.add(new TalkFragment());

          navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);

          vp.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
              @Override
              public Fragment getItem(int position) {
                  return list.get(position);
              }

              @Override
              public int getCount() {
                  return list.size();
              }
          });

          vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
              @Override
              public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

              }

              @Override
              public void onPageSelected(int position) {
                  index = position;
                  reflushView();
              }

              @Override
              public void onPageScrollStateChanged(int state) {

              }
          });
      }

      private void reflushView() {
          vp.setCurrentItem(index);
          navigation.getMenu().getItem(index).setChecked(true);
          invalidateOptionsMenu();
          switch (index){
              case 0:
                  setTitle(R.string.bottom_title_room);
                  break;
              case 1:
                  setTitle(R.string.bottom_title_discover);
                  break;
              case 2:
                  setTitle(R.string.bottom_title_talk);
                  break;
          }
      }

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

      @Override
      public boolean onPrepareOptionsMenu(Menu menu) {
          MenuItem logout = menu.findItem(R.id.logout);
          MenuItem deleteAll = menu.findItem(R.id.deleteAll);
          switch (index){
              case 0:
                  logout.setVisible(true);
                  deleteAll.setVisible(false);
                  break;
              case 1:
                  logout.setVisible(false);
                  deleteAll.setVisible(false);
                  break;
              case 2:
                  logout.setVisible(false);
                  deleteAll.setVisible(true);
                  break;
          }
          return super.onPrepareOptionsMenu(menu);
      }

      @Override
      public boolean onOptionsItemSelected(MenuItem item) {
          switch (item.getItemId()){
              case R.id.logout:
                  finishAllActivity();
                  System.exit(0);
                  break;
              case R.id.deleteAll:
                  ProgressDialog.show(getCurrent());
                  break;
          }
          return super.onOptionsItemSelected(item);
      }

  }

如果有朋友對BottomNavigationView不熟悉的話刑峡,可以查看我的BottomNavigationView簡單使用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末洋闽,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子突梦,更是在濱河造成了極大的恐慌诫舅,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宫患,死亡現(xiàn)場離奇詭異刊懈,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)娃闲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門虚汛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人皇帮,你說我怎么就攤上這事泽疆。” “怎么了玲献?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵殉疼,是天一觀的道長。 經(jīng)常有香客問我捌年,道長瓢娜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任礼预,我火速辦了婚禮眠砾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘托酸。我一直安慰自己褒颈,他們只是感情好柒巫,可當(dāng)我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著谷丸,像睡著了一般堡掏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上刨疼,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天泉唁,我揣著相機(jī)與錄音,去河邊找鬼揩慕。 笑死亭畜,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的迎卤。 我是一名探鬼主播拴鸵,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蜗搔!你這毒婦竟也來了宝踪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤碍扔,失蹤者是張志新(化名)和其女友劉穎瘩燥,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體不同,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡厉膀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了二拐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片服鹅。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖百新,靈堂內(nèi)的尸體忽然破棺而出企软,到底是詐尸還是另有隱情,我是刑警寧澤饭望,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布仗哨,位于F島的核電站,受9級特大地震影響铅辞,放射性物質(zhì)發(fā)生泄漏厌漂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一斟珊、第九天 我趴在偏房一處隱蔽的房頂上張望苇倡。 院中可真熱鬧,春花似錦、人聲如沸旨椒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽综慎。三九已至涣仿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間寥粹,已是汗流浹背变过。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工埃元, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留涝涤,地道東北人。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓岛杀,卻偏偏與公主長得像阔拳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子类嗤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容