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();
}