0

カスタムアダプタ(TabPagerAdapter.java)を使用するTabLayoutを持っています。この関数で初期化されました(以前は問題があったため、それは)初期化する前に、すべてのものを削除します。デバッガが接続されていないときにTabLayoutフラグメントが同じものとしてインスタンス化される

public boolean setPagerViewContents(int mode, ArrayList<String> titles) { 
    try { 
     mTabLayout.removeAllTabs(); 
     mViewPager.setAdapter(null); 
     mViewPager.removeAllViews(); 
     for (int i = 0; i < titles.size(); i++) { 
      mTabLayout.addTab(mTabLayout.newTab().setText(titles.get(i))); 
     } 

     mAdapter = new TabPagerAdapter(getSupportFragmentManager(), titles.size(), mode); 
     mViewPager.setAdapter(mAdapter); 
     mViewPager.invalidate(); 
     return true; 
    } catch (Exception e) { 
     mErrorReporter.reportError(e); 
     return false; 
    } 
} 

カスタムアダプタ(TabPageAdapter.java):

public class TabPagerAdapter extends FragmentStatePagerAdapter { 

    int mTabCount; 
    int mLayoutType; 

    public TabPagerAdapter(FragmentManager fm, int numberOfTabs, int layoutType) { 
     super(fm); 
     this.mTabCount = numberOfTabs; 
     this.mLayoutType = layoutType; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     switch (mLayoutType) { 
      case 0: 
       switch (position) { 
        case 0: 
         return new Fragment15(); 
        case 1: 
         return new Fragment1(); 
        default: 
         return null; 
       } 
      case 1: 
       switch (position) { 
        case 0: 
         return new Fragment3(); 
        case 1: 
         return new Fragment2(); 
        default: 
         return null; 
       } 
      default: 
       return null; 
     } 
    } 

    @Override 
    public int getCount() { 
     return mTabCount; 
    } 

    @Override 
    public int getItemPosition(Object object) { 
     return POSITION_NONE; 
    } 
} 

アプリは()右モードとタイトルと機能setPagerViewContentsを開始すると、その後、呼ばれmViewPager.setCurrentItem(number)は右のタブを表示するために呼び出されます。しかし、今度はmViewPagerに表示されているフラグメントは正しいですが、タブタイトルをクリックすると、最初の(number)タブをタップすると、フラグメントが開始時に表示されます(インデックスが表示されていないインデックスnumberのもの)何か他のタブ(numberではない)にもう一度、そして再度、表示されたタブは正しいです。

ここで一番厄介なことは、一貫性がないこと、ときどき起こらないこと、デバッガが接続されているために正しくデバッグできないことです。他のコードが必要な場合は、この記事をできるだけ早く更新していきます。これは、自分の正気や少数のユーザーの幸せのために、これが解決されたことを本当に見たいと思っています。次のメソッドをオーバーライドすることにより、TabPagerAdapterのタブに

public boolean setPagerViewContents(int mode, ArrayList<String> titles) { 
     try { 
      mAdapter = new TabPagerAdapter(getSupportFragmentManager(), titles.size(), mode); 
      mViewPager.setAdapter(mAdapter); 
      mTabLayout.setupWithViewPager(mViewPager); 
      return true; 
     } catch (Exception e) { 
      mErrorReporter.reportError(e); 
      return false; 
     } 
    } 

と設定テキスト:

答えて

1
はあなたの次の方法を変更して

@Override 
    public CharSequence getPageTitle(int position) { 
     return context.getString(tabTitles[position]); 
    } 
+0

を受け入れるこれが機能するように見えたとして。それがなければ私はそれを元に戻すでしょう。 – Avamander

関連する問題