Tablayout внутри макета навигационной панели не возвращает правильный фрагмент? - PullRequest
0 голосов
/ 24 января 2020

Вначале, когда я запускаю навигационную панель, вкладка внутри фрагмента навигационной панели работает правильно. Но когда я нажимаю на кнопку «домой» в ящике, где находится фрагмент табуляции, он не загружает фрагменты должным образом и выдает ошибки. Код ниже.

Активность моего ящика:

public class TeacherDrawerActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {

    private DrawerLayout drawer;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
//        View decorView = getWindow().getDecorView();
//        // Hide the status bar.
//        int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
//        decorView.setSystemUiVisibility(uiOptions);

        //----------------------------------------

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_teacher_drawer);
        Toolbar toolbar = findViewById(R.id.teacher_nav_drawer_toolbar);

        setSupportActionBar(toolbar);

        drawer = findViewById(R.id.teacher_drawer_layout);
        NavigationView navigationView = findViewById(R.id.teacher_nav_view);
        navigationView.setNavigationItemSelectedListener(this);

        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar,
                R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.addDrawerListener(toggle);
        toggle.syncState();

        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction().replace(R.id.teacher_fragment_container,
                    new TeacherHomeFragment()).commit();
            navigationView.setCheckedItem(R.id.teacher_nav_home);
        }
    }

    @Override
    public void onBackPressed() {
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
        switch (menuItem.getItemId()){
            case R.id.teacher_nav_home:
                getSupportFragmentManager().beginTransaction().replace(R.id.teacher_fragment_container,
                        new TeacherHomeFragment()).commit();
                break;

            case R.id.teacher_nav_my_profile:
                startActivity(new Intent(this,TeacherMyProfile.class));
                break;
                //Put other fragments and stuff
        }

        drawer.closeDrawer(GravityCompat.START);

        return true;
    }
}

my TeacherHomeFragment

public class TeacherHomeFragment extends Fragment {



    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.teacher_fragment_home, container, false);


    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {

            TabLayout tabLayout = getView().findViewById(R.id.teacher_fragment_home_tab_layout);
            ViewPager viewPager = getView().findViewById(R.id.teacher_fragment_home_viewpager);

            TeacherPageAdapter pageAdapter = new TeacherPageAdapter(getFragmentManager(), tabLayout.getTabCount());

            viewPager.setAdapter(pageAdapter);
            tabLayout.setupWithViewPager(viewPager);


    }
}

my FragmentPager

public class TeacherPageAdapter extends FragmentPagerAdapter {
    private int numOfTabs;

    public TeacherPageAdapter(@NonNull FragmentManager fm, int behavior) {
        super(fm, behavior);
        numOfTabs = behavior;
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return new TeacherSubHomeFragment();
            case 1:
                return new TeacherNotificationsFragment();
            case 2:
                return new TeacherViewProfileFragment();
            default:
                return null;
        }
    }

    @Override
    public int getCount() {
        return numOfTabs;
    }

    public CharSequence getPageTitle(int position) {
        switch (position) {
            case 0:
                return "HOME";
            case 1:
                return "NOTIFICATIONS";
            case 2:
                return "VIEW PROFILE";
        }
        return null;
    }
}

Это результат Работает нормально при первом запуске приложения

Однако, когда я нажимаю кнопку home (что должно загрузить фрагмент с табуляцией

Выдает ошибку, и переключение следующих вкладок вроде частично загружает фрагменты

...