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

앱이 바로 모드 및 제목)와 기능 setPagerViewContents를 (시작
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; 
    } 
} 

가 호출, 그후에는 초기화하기 전에 모든 것을) 제거3210은 오른쪽 탭을 표시하기 위해 호출됩니다. 그러나 이제는 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