2017-02-14 47 views
0

我在bottomNavigationView中有兩項:「next」和「previous」,我希望如果viewpager中的當前圖像是第一個,「previous」選項不會啓用,並且如果我們在最後一個圖像中「下一個」選項更改過的文字爲「完成」 我做了這樣的事情:BottomNavigationView與ViewPager

@Override 
public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
    switch (item.getItemId()) { 
     case android.R.id.home: 
      // NavUtils.navigateUpTo(this, new Intent(this, HomeActivity.class)); 
      // startActivity(new Intent(this, HomeActivity.class)); 
      return true; 
     case R.id.action_previous: 
      item.setEnabled(mViewPager.getCurrentItem() > 0); 
      mViewPager.setCurrentItem(mViewPager.getCurrentItem() -1); 
      return true; 
     case R.id.action_next: 
      if(mViewPager.getCurrentItem() == mPagerAdapter.getCount() -1){ 
       item.setTitle(getString(R.string.action_finish)); 
      } 
      mViewPager.setCurrentItem(mViewPager.getCurrentItem() + 1); 
      return true; 
    } 
    return false; 
} 

但監守如果部分onNavigationItemSelected後進行,也當回從去年「完成」稱號的第一圖像仍然會出現

這是錯的

任何想法,將不勝感激

回答

0

如果有人絆倒了這一點,這是實現這一目標的一種方法。你必須啓用/禁用菜單項,並在附加設置它可檢查。假設在BottomNavigation中有3個菜單項,Prev爲0,Next爲2,這裏是可以工作的代碼...

 @Override 
    public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
     int index = mViewPager.getCurrentItem();   
     switch (item.getItemId()) { 
      case android.R.id.home: 
       // NavUtils.navigateUpTo(this, new Intent(this, HomeActivity.class)); 
       // startActivity(new Intent(this, HomeActivity.class)); 
       return true; 
      case R.id.action_previous: 
       if (0 != index) { 
        mViewPager.setCurrentItem(index - 1, true); 
        if(1 == index) { 
         item.setEnabled(false); 
         item.setCheckable(true); 
         item.setChecked(true); 
        } else { 
         item.setChecked(false); 
         item.setCheckable(false); 
        } 
        mNavigation.getMenu().getItem(2).setEnabled(true); 
       } 
       return true; 
      case R.id.action_next: 
       if (mAdapterViewPager.getCount()-1 > index) { 
        mViewPager.setCurrentItem(index + 1, true); 
        if(mAdapterViewPager.getCount()-2 == index) { 
         item.setTitle(getString(R.string.action_finish));    
         item.setEnabled(false); 
         item.setCheckable(true); 
         item.setChecked(true); 
        } else { 
         item.setChecked(false); 
         item.setCheckable(false); 
        } 
        mNavigation.getMenu().getItem(0).setEnabled(true); 
       } 
       return true; 
      } 
      return false; 
     }