2017-11-11 130 views
0

我试图实现一个底部导航栏,当导航项被点击时改变片段。但是,当我点击导航栏项目时,碎片不会改变。使用log.d,我注意到没有调用onNavigationItemSelected我该如何解决这个问题?onNavigationItemSelected未被调用的底部导航栏

要注意,startFeedFragmentstartScheduleFragment,& startSettingsFragment实现同样的方式,他们的工具栏中的按钮工作。我也参考了这个tutorial和这个question寻求帮助。

MainActivity.java

public class MainActivity extends AppCompatActivity implements BottomNavigationView.OnNavigationItemSelectedListener { 

protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     setUpRecycler(); 
     startFeedFragment(); 

     BottomNavigationView bottomNavBar = (BottomNavigationView) findViewById(R.id.navigation); 
     bottomNavBar.bringToFront(); 
     bottomNavBar.setOnNavigationItemSelectedListener(this); 
    } 

    @Override 
    public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
     Log.d("NAV BAR", "onNavigationItemSelected hit"); 
     switch (item.getItemId()) { 
      case R.id.feedMenu: 
       startFeedFragment(); 
       Log.d("NAV BAR", "feed"); 
       break; 
      case R.id.myScheduleMenu: 
       startScheduleFragment(); 
       Log.d("NAV BAR", "schedule"); 
       break; 
      case R.id.settingsMenu: 
       startSettingsFragment(); 
       Log.d("NAV BAR", "settings lol"); 
       break; 
      default: 
       Log.d("NAV BAR", "false"); 
       return false; 
     } 
     return true; 
    } 

    /** 
    * Switches out the fragment for {@link FeedFragment} and sets an appropriate title. startScheduleFragmens & startSettingsFragment are implemented the same way 
    */ 
    private void startFeedFragment() 
    { 
     FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
     transaction.replace(R.id.fragmentContainer, new FeedFragment()); 
     transaction.commit(); 
     getSupportActionBar().setTitle(R.string.title_fragment_feed); 
    } 
} 

片段从XML文件

<android.support.constraint.ConstraintLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

     <FrameLayout 
      android:id="@+id/fragmentContainer" 
      android:layout_width="0dp" 
      android:layout_height="0dp" 
      app:layout_constraintBottom_toTopOf="@+id/navigation" 
      app:layout_constraintEnd_toEndOf="parent" 
      app:layout_constraintStart_toStartOf="parent" 
      app:layout_constraintTop_toTopOf="parent" /> 

     <android.support.design.widget.BottomNavigationView 
      android:id="@+id/navigation" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      app:itemBackground="@android:color/white" 
      app:itemIconTint="@color/colorPrimaryDark" 
      app:itemTextColor="@color/colorPrimaryDark" 
      app:layout_constraintBottom_toBottomOf="parent" 
      app:layout_constraintEnd_toEndOf="parent" 
      app:layout_constraintStart_toStartOf="parent" 
      app:menu="@menu/bottom_nav" 
      android:elevation="8dp"/> 
    </android.support.constraint.ConstraintLayout> 

</android.support.design.widget.CoordinatorLayout> 

enter image description here

回答

0

解决了!这是因为我已将菜单中的按钮设置为android:enabled="false"。这意味着他们不能被按下,这就是为什么onNavigationItemSelected没有被调用。我将所有按钮设置为android:enabled="true"来解决这个问题。对于bottom_nav.xml

正确的代码

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/bottom_nav_my_schedule" 
     android:title="@string/menu_my_schedule" 
     android:icon="@drawable/ic_event_available_white_24dp" 
     android:enabled="true"/> <!--make sure enabled is set to true!--> 
    <item android:id="@+id/bottom_nav_feed" 
     android:title="@string/menu_feed" 
     android:icon="@drawable/ic_view_list_white_24dp" 
     android:enabled="true" /> <!--make sure enabled is set to true!--> 
    <item android:id="@+id/bottom_nav_settings" 
     android:title="@string/menu_settings" 
     android:icon="@drawable/ic_settings_white_24dp" 
     android:enabled="true"/> <!--make sure enabled is set to true!--> 
</menu>