Навигация между фрагментом и действиями

У меня возникли проблемы с навигацией между фрагментами и действиями, я использовал автоматически сгенерированный шаблон Android studios 2.2.3 и настроил его для навигации между фрагментами.

Я добавил пять фрагментов и использовал это руководство Использование фрагментов с помощью панели навигации< /а>.

Фрагменты работают отлично, и все в порядке, поэтому я хотел перейти к другому действию, используя тот же Navigation Drawer, но он продолжал падать, я использовал Intent.

public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();
    Fragment fragment = null;
    Class fragmentClass = null;
    if (id == R.id.nav_schedule) {
     fragmentClass = ScheduleFragment.class;
    } else if (id == R.id.nav_assingment) {
        fragmentClass = AssignmentsFragment.class;
    } else if (id == R.id.nav_teachers) {
        fragmentClass = TeachersFragment.class;
    } else if (id == R.id.nav_score) {
        fragmentClass = ScoreFragment.class;
    } else if (id == R.id.nav_events) {
        fragmentClass = EventsFragment.class;
    } else if (id == R.id.nav_setting) {

    }else if (id == R.id.nav_about) {
        Intent intent = new Intent(getApplicationContext(),AboutActivity.class);
        startActivity(intent);
    }else if (id == R.id.nav_logout) {
        Intent i = new Intent(getApplicationContext(),LoginActivity.class);
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
        startActivity(i);
    }
         try {
             try {
                 fragment = (Fragment) fragmentClass.newInstance();
             } catch (InstantiationException e) {
                 e.printStackTrace();
             } catch (IllegalAccessException e) {
                 e.printStackTrace();
             }
             FragmentManager fragmentManager = getSupportFragmentManager();
             fragmentManager.beginTransaction().replace(R.id.container, fragment).commit();
         }catch (android.app.Fragment.InstantiationException e){
             e.printStackTrace();
         }
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
}

Логкат

E/AndroidRuntime: НЕИСПРАВНОЕ ИСКЛЮЧЕНИЕ: основной процесс: com.zer0ll.demo.studentapp, PID: 31638 java.lang.NullPointerException: попытка вызвать виртуальный метод 'java.lang.Object java.lang.Class.newInstance()' в нулевая ссылка на объект в com.zer0ll.demo.studentapp.Activities.HomeActivity.onNavigationItemSelected(HomeActivity.java:95) в android.support.design.widget.NavigationView$1.onMenuItemSelected(NavigationView.java:156) в android.support.v7 .view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:822) в android.support.v7.view.menu.SubMenuBuilder.dispatchMenuItemSelected(SubMenuBuilder.java:88) в android.support.v7.view.menu.MenuItemImpl.invoke (MenuItemImpl.java:156) в android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:969) в android.support.design.internal.Navig ationMenuPresenter$1.onClick(NavigationMenuPresenter.java:342) в android.view.View.performClick(View.java:5156) в android.view.View$PerformClick.run(View.java:20755) в android.os.Handler. handleCallback(Handler.java:739) в android.os.Handler.dispatchMessage(Handler.java:95) в android.os.Looper.loop(Looper.java:145) в android.app.ActivityThread.main(ActivityThread.java :5835) в java.lang.reflect.Method.invoke(собственный метод) в java.lang.reflect.Method.invoke(Method.java:372) в com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit .java:1399) на com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

Любая помощь будет оценена по достоинству. Спасибо.


comment
Добавьте также часть кода, где и какую именно ошибку вы получаете?   -  person buzzingsilently    schedule 06.03.2017
comment
Возможно, проблема в том, что вы не определили активность в своем манифесте. Но все же для большей ясности здесь нужно предоставить крашлоги и код.   -  person VikasGoyal    schedule 06.03.2017
comment
@Avi Прошу прощения, сейчас отредактирую   -  person Moha_a_Osman    schedule 06.03.2017


Ответы (3)


Вы должны определить активность в своем манифесте.

person Community    schedule 06.03.2017
comment
Мои действия работают отлично, я не могу назвать их навигационным ящиком, вот и все. - person Moha_a_Osman; 06.03.2017

попробуйте добавить свою активность в файл манифеста,

<activity android:name="Packagename.AboutActivity">

        </activity>

    <activity android:name="Packagename.LoginActivity">

        </activity>
person Sushil Dubey    schedule 06.03.2017

Начните свою активность с контекстом активности, не используя контекст приложения, и верните true после запуска активности, а также объявите в манифесте с правильным именем пакета, подобным этому

 public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();
    Fragment fragment = null;
    Class fragmentClass = null;
    if (id == R.id.nav_schedule) {
        fragmentClass = ScheduleFragment.class;
    } else if (id == R.id.nav_assingment) {
        fragmentClass = AssignmentsFragment.class;
    } else if (id == R.id.nav_teachers) {
        fragmentClass = TeachersFragment.class;
    } else if (id == R.id.nav_score) {
        fragmentClass = ScoreFragment.class;
    } else if (id == R.id.nav_events) {
        fragmentClass = EventsFragment.class;
    } else if (id == R.id.nav_setting) {

    }else if (id == R.id.nav_about) {
        Intent intent = new Intent(classname.this,AboutActivity.class);
        startActivity(intent);
        return true;
    }else if (id == R.id.nav_logout) {
        Intent i = new Intent(classname.this,LoginActivity.class);
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
        startActivity(i);
        return true;
    }
    try {
        try {
            fragment = (Fragment) fragmentClass.newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction().replace(R.id.container, fragment).commit();
    }catch (android.app.Fragment.InstantiationException e){
        e.printStackTrace();
    }
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
}
person Rishi    schedule 06.03.2017
comment
Извините, но ничего не изменилось - person Moha_a_Osman; 06.03.2017
comment
возвращайте результат true, когда вы начинаете свою деятельность, это может вам помочь. Intent i = new Intent(classname.this,LoginActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); начать активность (я); вернуть истину; Я уже внес изменения в свой ответ, посмотри - person Rishi; 06.03.2017