2017-10-21 4 views
0

構造体は次のとおりです。私は1つのアクティビティと複数のフラグメントを使用してアプリケーションを構築したいと考えています。 MainActivityには、コンテナとして機能するFrameLayoutがあります。最初にFragment_Baseがコンテナに追加されます。そこにはTabLayoutとViewPagerがあり、Tab1、Tab2 & Tab3の3つのタブが含まれています。別のフラグメントから返された場合のVIewPagerの表示エラー

次に、Tab1にボタンがあります。これをクリックすると、Framelayout(コンテナ)がFragment_Searchに置き換えられます。実際に動作し、新しいFragment_Searchが表示されます。しかし、電話で[戻る]ボタンをクリックして元の断片に戻ると、何かが間違っています。ここで

が変更される:

これは3つのタブでFragment_Baseの元の状態である

Tab1を上のボタンをクリックし、へFragment_Search

戻るにジャンプFragment_Base、間違って取得します。

ご覧のとおり、Tab1のすべてのウィジェットは表示されなくなりますが、Tab2-> Tab3-> Tab2-> Tab1にスワイプすると再び表示されます。 Tab2の背景はオレンジ色で、消えるだけです。さらに奇妙なことは、TabLayoutのtab2のインジケータバーが間違った位置にあることです。これは、タブ3 - >タブ2にスワイプすると正常になります。

  1. MainActivity.java、OnCreate関数(IN):Fragment_Base.java、OnCreateView()において

    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. 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):

    Fragment1.java、クリック時(ビュービュー)では
    switch (position) { 
        case 0: 
         return new Fragment1(); 
        case 1: 
         return new Fragment2(); 
        case 2: 
         return new Fragment3(); 
    
        default: 
         return null; 
    } 
    
  4. : すべてのログは、実際に、白ですが、ここでは全てのフラグメントのログです

    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

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

まあ...私はきれいにして、プロジェクトを再構築し、すべてがうまくいく...

関連する問題