2017-10-21 61 views
0

Voici la structure: Je veux utiliser une seule activité et plusieurs fragments pour construire mon application. Dans MainActivity, il y a un FrameLayout qui fonctionne comme le conteneur. Au tout début Fragment_Base sera ajouté au conteneur, dans lequel il y a un TabLayout et un ViewPager, contenant trois onglets: Tab1, Tab2 & Tab3, tous les fragments.VIewPager erreur d'affichage lors du retour d'un autre fragment

Ensuite, dans Tab1, il y a un bouton. Lorsque vous cliquez dessus, le Framelayout (le conteneur) sera remplacé par un Fragment_Search. Cela fonctionne, en effet, et un nouveau Fragment_Search s'affiche. Mais quand je clique sur le bouton Retour sur le téléphone et que je reviens à l'ancien fragment, quelque chose ne va pas.

Voici le changement:

Ceci est l'état d'origine du Fragment_Base avec 3 onglets

Cliquez sur le bouton Tab1 et sauter à Fragment_Search

Retour à Fragment_Base, et se trompe.

Comme vous pouvez le voir, tous les widgets de l'onglet 1 disparaissent, mais ils s'affichent de nouveau après avoir glissé vers Tab2-> Tab3-> Tab2-> Tab1. L'arrière-plan de Tab2 est orange, et il disparaît juste. Une autre chose étrange est que la barre d'indicateur de tab2 dans TabLayout est dans la mauvaise position, ce qui devient également normal si je glisse vers tab3-> tab2.

Voici un code:

  1. En MainActivity.java, OnCreate():

    if (findViewById(R.id.framelayout_base) != null) { 
    
        if (savedInstanceState != null) { 
         return ; 
        } 
    
        Frag_Base frag_base = new Frag_Base(); 
        getSupportFragmentManager().beginTransaction() 
          .add(R.id.framelayout_base, frag_base) 
          .commit(); 
    
    } 
    
  2. En Fragment_Base.java, OnCreateView():

    View view = inflater.inflate(R.layout.fragment_base, container, false); 
    
    fragmentActivity = getActivity(); 
    
    // initial views 
    mViewPager = view.findViewById(R.id.viewPager_); 
    mFragmentPagerAdapter = new MainFragmentPagerAdapter(fragmentActivity.getSupportFragmentManager()); 
    mViewPager.setAdapter(mFragmentPagerAdapter); 
    
    mTabLayout = view.findViewById(R.id.tabLayout_); 
    mTabLayout.setupWithViewPager(mViewPager); 
    
    mTabLayout.getTabAt(0).setIcon(R.drawable.ic_search); 
    mTabLayout.getTabAt(1).setIcon(R.drawable.ic_star); 
    mTabLayout.getTabAt(2).setIcon(R.drawable.ic_profile); 
    
  3. Dans MainFragmentPagerAdapter.java, getItem (position int):

    switch (position) { 
        case 0: 
         return new Fragment1(); 
        case 1: 
         return new Fragment2(); 
        case 2: 
         return new Fragment3(); 
    
        default: 
         return null; 
    } 
    
  4. En Fragment1.java, OnClick (Voir vue):

    case R.id.fab_gotoSearch: 
    
         Log.d(TAG, "onClick: "+"go to search"); 
    
         Frag_Search frag_search = new Frag_Search(); 
         getFragmentManager().beginTransaction() 
           .replace(R.id.framelayout_base, frag_search) 
           .addToBackStack(null) 
           .commit(); 
    
         break; 
    

EDIT Tous les journaux sont blancs, en fait, mais voici les journaux de tous les fragments:

10-21 09:34:25.923 5537-5537/com.project.nanfang.music_n D/Fragment_Base: onAttach: 
10-21 09:34:25.923 5537-5537/com.project.nanfang.music_n D/Fragment_Base: onCreate: 
10-21 09:34:25.925 5537-5537/com.project.nanfang.music_n D/Fragment_Base: onCreateView: 
10-21 09:34:25.974 5537-5537/com.project.nanfang.music_n D/Fragment_Base: onStart: 
10-21 09:34:25.976 5537-5537/com.project.nanfang.music_n D/Fragment_Base: onResume: 
10-21 09:34:26.015 5537-5537/com.project.nanfang.music_n D/Fragment1: onAttach: 
10-21 09:34:26.015 5537-5537/com.project.nanfang.music_n D/Fragment1: onCreate: 
10-21 09:34:26.015 5537-5537/com.project.nanfang.music_n D/Fragment2: onAttach: 
10-21 09:34:26.015 5537-5537/com.project.nanfang.music_n D/Fragment2: onCreate: 
10-21 09:34:26.016 5537-5537/com.project.nanfang.music_n D/Fragment1: onCreateView: 
10-21 09:34:26.090 5537-5537/com.project.nanfang.music_n D/Fragment1: onStart: 
10-21 09:34:26.090 5537-5537/com.project.nanfang.music_n D/Fragment1: onResume: 
10-21 09:34:26.090 5537-5537/com.project.nanfang.music_n D/Fragment2: onCreateView: 
10-21 09:34:26.093 5537-5537/com.project.nanfang.music_n D/Fragment2: onStart: 
10-21 09:34:26.093 5537-5537/com.project.nanfang.music_n D/Fragment2: onResume: 
10-21 09:34:41.028 5537-5537/com.project.nanfang.music_n D/Fragment3: onAttach: 
10-21 09:34:41.028 5537-5537/com.project.nanfang.music_n D/Fragment3: onCreate: 
10-21 09:34:41.028 5537-5537/com.project.nanfang.music_n D/Fragment3: onCreateView: 
10-21 09:34:41.030 5537-5537/com.project.nanfang.music_n D/Fragment3: onStart: 
10-21 09:34:41.030 5537-5537/com.project.nanfang.music_n D/Fragment3: onResume: 
10-21 09:34:46.933 5537-5537/com.project.nanfang.music_n D/Fragment1: onPause: 
10-21 09:34:46.933 5537-5537/com.project.nanfang.music_n D/Fragment1: onStop: 
10-21 09:34:51.374 5537-5537/com.project.nanfang.music_n D/Fragment1: onCreateView: 
10-21 09:34:51.410 5537-5537/com.project.nanfang.music_n D/Fragment1: onStart: 
10-21 09:34:51.411 5537-5537/com.project.nanfang.music_n D/Fragment1: onResume: 
10-21 09:35:01.860 5537-5537/com.project.nanfang.music_n D/Fragment3: onPause: 
10-21 09:35:01.860 5537-5537/com.project.nanfang.music_n D/Fragment3: onStop: 
10-21 09:35:08.150 5537-5537/com.project.nanfang.music_n D/Fragment1: onClick: go to search 
10-21 09:35:08.152 5537-5537/com.project.nanfang.music_n D/Frag_Search: onAttach: 
10-21 09:35:08.152 5537-5537/com.project.nanfang.music_n D/Frag_Search: onCreate: 
10-21 09:35:08.152 5537-5537/com.project.nanfang.music_n D/Fragment_Base: onPause: 
10-21 09:35:08.152 5537-5537/com.project.nanfang.music_n D/Fragment_Base: onStop: 
10-21 09:35:08.159 5537-5537/com.project.nanfang.music_n D/Frag_Search: onCreateView: 
10-21 09:35:08.243 5537-5537/com.project.nanfang.music_n D/Frag_Search: onStart: 
10-21 09:35:08.243 5537-5537/com.project.nanfang.music_n D/Frag_Search: onResume: 
10-21 09:35:13.843 5537-5537/com.project.nanfang.music_n D/Frag_Search: onPause: 
10-21 09:35:13.843 5537-5537/com.project.nanfang.music_n D/Frag_Search: onStop: 
10-21 09:35:13.854 5537-5537/com.project.nanfang.music_n D/Fragment_Base: onCreateView: 
10-21 09:35:13.874 5537-5537/com.project.nanfang.music_n D/Fragment_Base: onStart: 
10-21 09:35:13.874 5537-5537/com.project.nanfang.music_n D/Fragment_Base: onResume: 

Apparaît qu'après être revenu à Fragment_Base, Fragment1 n'appelle pas OnCreate(). Est-ce le problème?

+0

Publiez vos journaux d'erreur –

Répondre

0

Bien ... Je nettoie et reconstruis le projet et puis tout va bien ...