导航菜单片段无法初始化其布局的组件



我已经为应用程序创建了一个导航菜单片段,以便可以在所有活动中使用它。但是,当我运行应用程序时,当我单击汉堡图标或从左向右拉动时,菜单都无法使用。因此,我决定使用调试器,发现我的片段的布局组件都没有在片段的类中初始化。您能帮我弄清楚为什么会发生这种情况以及如何解决吗?这是我的fragment.java类和我的fragment_layout.xml文件:

fragment.java:

public class NavMenuFragment extends Fragment {
// NavMenu member vars
private DrawerLayout mDrawerLayout;
private NavigationView navigationView;
private ActionBarDrawerToggle mToggle; // Button for toggling the side menu
// Keeps the position of the previously selected menu item(0 : Home)
int position = 0;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_nav_menu,null);
    mDrawerLayout = view.findViewById(R.id.drawerLayout);
    navigationView = view.findViewById(R.id.nav_view);
    mToggle = new ActionBarDrawerToggle(getActivity(),mDrawerLayout,R.string.drawer_open,R.string.drawer_closed); // Instantiating our button
    return view;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    // Sets the default selected menu item, to the Home item
    navigationView.getMenu().findItem(R.id.nav_home).setChecked(true);
    // Used to help on check and uncheck menu items when the user clicks on them
    final List<MenuItem> items = new ArrayList<>();
    Menu menu;
    menu = navigationView.getMenu();
    // Fill the list with all the menu items
    for(int i=0; i<menu.size();i++) {
        items.add(menu.getItem(i));
    }
    Toast.makeText(getActivity(), "size:" + items.size(), Toast.LENGTH_SHORT).show();
    // When an item inside the NavView gets clicked, then handle the event...
    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()) {
                case R.id.nav_home:
                    mDrawerLayout.closeDrawer(Gravity.START);
                    break;
                case R.id.nav_UserBoxGLB:
                    break;
                case R.id.nav_UserBoxJP:
                    break;
                case R.id.nav_settings:
                    break;
                case R.id.nav_feedback:
                    break;
                case R.id.nav_contact_us:
                    break;
                case R.id.nav_donate:
                    // Open the website's URL in a browser window
                    Intent intent = new Intent();
                    intent.setAction(Intent.ACTION_VIEW);
                    intent.addCategory(Intent.CATEGORY_BROWSABLE);
                    intent.setData(Uri.parse("http://www.google.com"));
                    startActivity(intent);
                    break;
                case R.id.nav_about:
                    break;
                default:
                    return onNavigationItemSelected(item);
            }
            items.get(position).setChecked(false);
            item.setChecked(true);
            mDrawerLayout.closeDrawers();
            return false;
        }
    });
    mDrawerLayout.addDrawerListener(mToggle);
    // Set the hamburger icon's color
    mToggle.getDrawerArrowDrawable().setColor(getResources().getColor(R.color.NavActionBarTextColor));
    mToggle.syncState();
}
// When an item from the Action Bar gets tapped, then...
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    return mToggle.onOptionsItemSelected(item) || onOptionsItemSelected(item);
}
}

fragment_layout.xml:

 <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_gravity="left"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorPrimary"
    android:id="@+id/drawerLayout">
    <!-- The actual side menu Nav View -->
    <android.support.design.widget.NavigationView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:headerLayout="@layout/navigation_header"
        app:menu="@menu/navigation_menu"
        android:id="@+id/nav_view">
    </android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>

你做错了
如果您想对所有片段使用相同的导航抽屉,则
您可以在主要活动中制作导航抽屉,并从该导航抽屉打开片段。
这是教程

最新更新