android.support.v4.app.Fragment.mFragmentManager'для ссылки на пустой объект

У меня есть следующие строки кода, которые я использую, чтобы создать навигационное представление для загрузки фрагментов и этого приложения для Android. Я получаю сообщение об ошибке: android.support.v4.app.Fragment.mFragmentManager 'для пустой ссылки на объект. Я уже создал фрагменты, и навигационный обзор работает.

public void selectDrawerItem(MenuItem menuItem){

    Fragment fragment = null;
    Class fragmentClass = null;

    switch(menuItem.getItemId()){
        case R.id.nav_show_all_events_activity:
            fragmentClass = AllEventsFragment.class;
            break;
        case R.id.nav_whats_hot_today_activity:
            fragmentClass = WhatsHotFragment.class;
            break;
    }

    try {
        fragment = (Fragment) fragmentClass.newInstance();
    } catch (Exception e) {
        e.printStackTrace();
    }

    FragmentManager fragmentManager = getSupportFragmentManager();
    fragmentManager.beginTransaction().replace(R.id.flContent, fragment).commit();

    menuItem.setChecked(true);
    setTitle(menuItem.getTitle());
    mDrawer.closeDrawers();
}

2 ответа

Вы уверены, что в вашем меню только 2 MenuItems? Если есть еще, вы в конечном итоге с null фрагмент. Вы можете добавить регистр "по умолчанию" в свой оператор switch:

switch(menuItem.getItemId()){
    case R.id.nav_show_all_events_activity:
        fragmentClass = AllEventsFragment.class;
        break;
    case R.id.nav_whats_hot_today_activity:
        fragmentClass = WhatsHotFragment.class;
        break;
    default:
        return;
}

Это должно гарантировать, что фрагмент не будет нулевым.

Я проанализировал код и удивился, почему предыдущий метод не сработал. Я обнаружил небольшую проблему, касающуюся импорта, который я использовал. Я использовал следующее import android.support.v4.app.Fragment; импортировать в main_activity, Увидел, что я использовал import android.app.Fragment; в классах AllEventsFragment а также WhatsHotFragmentиз которых я изменил импорт на import android.support.v4.app.Fragment; Спасибо за помощь. Финальная версия ниже:

public void selectDrawerItem(MenuItem menuItem){

    FragmentManager manager = getSupportFragmentManager();
    FragmentTransaction transaction = manager.beginTransaction();
    Fragment fragment;

    switch(menuItem.getItemId()){
        case R.id.nav_show_all_events_activity:
            fragment = new AllEventsFragment();
            break;
        case R.id.nav_whats_hot_today_activity:
            fragment = new WhatsHotFragment();
            break;
        default:
            return;
    }

    transaction.replace(R.id.flContent, fragment);
    transaction.commit();

    menuItem.setChecked(true);
    setTitle(menuItem.getTitle());
    mDrawer.closeDrawers();
}
Другие вопросы по тегам