2017-10-21 60 views
0

這裏是結構:我想只使用一個Activity和幾個片段來構建我的應用程序。在MainActivity中有一個FrameLayout作爲容器。一開始,Fragment_Base將被添加到容器中,其中有一個TabLayout和一個ViewPager,包含三個選項卡:Tab1,Tab2 & Tab3,所有片段。當從另一個片段返回時VIewPager顯示錯誤

然後在Tab1中有一個按鈕。點擊它時,Framelayout(容器)將被Fragment_Search替換。它確實有效,並且顯示了一個新的Fragment_Search。但是當我點擊手機上的返回按鈕並返回到前一個片段時,出現了問題。

這裏的變化:

這是Fragment_Base的3個選項卡的原始狀態

點擊TAB1按鈕,跳轉到Fragment_Search

返回Fragment_Base,並得到錯誤。你可以看到,Tab1中的所有小部件都消失了,但是在滑動到Tab2-> Tab3-> Tab2-> Tab1之後它們再次出現。 Tab2的背景是橙色的,它只是消失。更奇怪的是TabLayout中tab2的指示條位置錯誤,如果我滑動到tab3-> tab2,這也會變得正常。

下面是一些代碼:

  1. 在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. 在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. 在MainFragmentPagerAdapter.java中,getItem(int position):

    switch (position) { 
        case 0: 
         return new Fragment1(); 
        case 1: 
         return new Fragment2(); 
        case 2: 
         return new Fragment3(); 
    
        default: 
         return null; 
    } 
    
  4. 在Fragment1.java,的OnClick(查看視圖):

    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; 
    

編輯 所有的日誌都是白色的,其實,但這裏是所有片段的日誌:

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: 

似乎在回到Fragment_Base後,Fragment1不會調用OnCreate()。這是問題嗎?

+0

發佈您的錯誤日誌 –

回答

0

那麼...我清理並重建項目,然後一切順利...

相關問題