V
V
Vlad Stefanovich2016-05-18 11:05:20
Android
Vlad Stefanovich, 2016-05-18 11:05:20

How to replace FragmentAdapter when NavigationDrawerItem is selected?

Hello everyone, I have the following problem:
When I select a NavigationView item, I generate PageFragmentAdapters each with a different number of tabs, but the problem is that if I have already created a FragmentAdapter, then when I select another item, it does not overwrite existing fragments.
For clarity, here is the
MainActivity code

private void initNavigationView() {
        drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.view_navigation_open, R.string.view_navigation_close);
        drawerLayout.setDrawerListener(toggle);
        toggle.syncState();

        NavigationView navigationView = (NavigationView) findViewById(R.id.navigation);
        navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(MenuItem item) {
                drawerLayout.closeDrawers();
                int id = item.getItemId();

                if (id == R.id.AccountItem) {
                    toolbar.setTitle( getResources().getString(R.string.navigation_acoount));
                    if (viewPager == null ){
                        viewPager = (ViewPager) findViewById(R.id.viewPager);
                    }

                    AccountPagerFragmentAdapter adapter1 = new AccountPagerFragmentAdapter(context,getSupportFragmentManager());

                    viewPager.setAdapter(adapter1);

                    if (tabLayout != null){
                        tabLayout = (TabLayout) findViewById(R.id.tabLayout);
                    }
                    tabLayout.setupWithViewPager(viewPager);
                    tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);

                } else if (id == R.id.NavigationServices) {
                    toolbar.setTitle( getResources().getString(R.string.navigation_services));
                    if (viewPager == null ){
                        viewPager = (ViewPager) findViewById(R.id.viewPager);
                    }

                    ServicesPagerFragmentAdapter adapter2 = new ServicesPagerFragmentAdapter(context,getSupportFragmentManager());
                    viewPager.setAdapter(adapter2);

                    if (tabLayout != null){
                        tabLayout = (TabLayout) findViewById(R.id.tabLayout);
                    }
                    tabLayout.setupWithViewPager(viewPager);
                    tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);

                } else if (id == R.id.NavigationCatalog) {
                    toolbar.setTitle( getResources().getString(R.string.navigation_catalog));
                    if (viewPager == null ){
                        viewPager = (ViewPager) findViewById(R.id.viewPager);
                    }

                    CatalogPagerFragmentAdapter adapter3 = new CatalogPagerFragmentAdapter(context,getSupportFragmentManager());

                    viewPager.setAdapter(adapter3);

                    if (tabLayout != null){
                        tabLayout = (TabLayout) findViewById(R.id.tabLayout);
                    }
                    tabLayout.setupWithViewPager(viewPager);
                    tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);

                } else if (id == R.id.NavigationSettigs) {
                    Intent intent = new Intent(MainActivity.this,SettingActivity.class);
                    startActivity(intent);
                } else if (id == R.id.NavigationAbout) {
                    Intent intent = new Intent(MainActivity.this,AboutActivity.class);
                    startActivity(intent);
                }

                DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
                drawer.closeDrawer(GravityCompat.START);
                return true;
            }
        }
        );
    }

+ Code for one of the
CatalogPagerFragmentAdapter fragments
package com.studio.autocomplex.client.adapter;

import android.content.Context;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

import com.studio.autocomplex.client.fragment.AbstractTabFragment;
import com.studio.autocomplex.client.fragment.NewCarsFragment;
import com.studio.autocomplex.client.fragment.TestDriveFragment;
import com.studio.autocomplex.client.fragment.UsedCarsFragment;

import java.util.HashMap;
import java.util.Map;

public class CatalogPagerFragmentAdapter extends FragmentPagerAdapter{

    private Map<Integer, AbstractTabFragment> tabs;
    private Context context;


    public CatalogPagerFragmentAdapter(Context context, FragmentManager fm) {
        super(fm);

        this.context = context;

        tabs = new HashMap<>();
        tabs.put(0, NewCarsFragment.getInstance(context));
        tabs.put(1, UsedCarsFragment.getInstance(context));
        tabs.put(2, TestDriveFragment.getInstance(context));
        this.notifyDataSetChanged();
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return tabs.get(position).getTitle();
    }

    @Override
    public Fragment getItem(int position) {
         return tabs.get(position);
    }

    @Override
    public int getCount() {
        return tabs.size();
    }
}

What have I done wrong ?? And please do not kick the code, I will refactor it a little later

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question