Je m'entraine sur Android Studio, et j'apprends à utiliser le Navigation Drawer, et les fragments.
Voici comment est composé mon mini projet: 1-J'ai un NavigationView qui possède deux items : tab1 et tab2 2-tab1 se charge de lancer un fragment qui se charge dans un framelayout 3-tab2 lance aussi un fragment qui qui se charge dans le même framelayout
Revenons à tab1 qui me prose problème. Il affiche deux fragments (T1 et T2) qui s'affichent dans un TabLayout géré par un viewPager.
Seulement quand je passe de tab2 à tab1 la première fois, les deux fragments T1 et T2 s'affichent. Quand je vais sur tab2 et je revient sur Tab1, plus rien, leur les Tabs T1, T2 sont là mais leurs contenus sont vides.
le NavigationView
Quand on clic sur TAB2
Quand on clic sur TAB1 (à partir du NavigationView) la première fois
Quand on va sur TAB2 et on revient sur TAB1 pour la seconde fois, le continue disparait (et cela sur les deux T1 et T2)
Le fragment qui charge les deux fragment T1 et T2 dans un viewPager et TabLayout
@Override
public View onCreateView(
LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState
) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.tab1_view, container, false);
//ONGLETS
t1ListFragment = new T1ListFragment();
t2ListFragment = new T2Fragment();
//VIEWPAGER, INCLU LES ONGLETS
viewPager = (ViewPager) view.findViewById(R.id.tab1Pager);
setViewPager(viewPager);
//TABLAYOUT
tabLayout = (TabLayout) view.findViewById(R.id.myT1sTabLayout);
tabLayout.setupWithViewPager(viewPager);
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
tabLayout.setOnTabSelectedListener(listener(viewPager));
return view;
}
private void setViewPager(ViewPager viewPager) {
adapter = new ViewPagerAdapter(getActivity().getSupportFragmentManager());
adapter.addFragment(t1ListFragment, "Tous les T1s");
adapter.addFragment(t2ListFragment,"Mes T1s");
viewPager.setAdapter(adapter);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
switch (position){
case 0:
return new T1ListFragment();
case 1:
return new T2Fragment();
default:
return null;
}
//return mFragmentList.get(position);
}
//This populates your Fragment reference array:
@Override
public Object instantiateItem(ViewGroup container, int position) {
Fragment createdFragment = (Fragment) super.instantiateItem(container, position);
mFragmentList.set(position, createdFragment);
return createdFragment;
}
@Override
public int getCount() {
return mFragmentList.size();
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
L'activite qui se chqrge de gérer les clics sur les items du Navigator Drawer
public class MainViewProcess extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.root_layout);
Toolbar toolbar = (Toolbar)findViewById(R.id.main_toolbar);
setSupportActionBar(toolbar);
drawer = findViewById(R.id.drawer_layout);
toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
navigationView = (NavigationView)findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
getSupportActionBar().setHomeButtonEnabled(true);
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
int id = menuItem.getItemId();
// 6 - Show fragment after user clicked on a menu item
switch (id){
case R.id.trocItem :
if (this.tab1ViewProcess == null) this.tab1ViewProcess = new TAB1ViewProcess();
this.startTransactionFragment(this.tab1ViewProcess);
break;
case R.id.kenItem:
if (this.tab2ViewProcess == null) this.tab2ViewProcess = new TAB2ViewProcess();
this.startTransactionFragment(this.tab2ViewProcess);
break;
default:
break;
}
this.drawer.closeDrawer(GravityCompat.START);
return true;
}
private void startTransactionFragment(Fragment fragment){
if (!fragment.isVisible()){
getSupportFragmentManager().beginTransaction()
.replace(R.id.main_fragment_layout, fragment).commit();
}
}
}
PS: j'ai omis les déclarations de variables pour réduire le code
Que dois je faire? Merci pour votre aide
- Edité par sajreborn 21 juin 2020 à 19:45:37
Tant qu'on vie, faisons ce que nous pouvons et faisons le bien!
viewPager, TabLayout, NavigationView:
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.