사용자 지정 어댑터 (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;
}
}
및 설정 텍스트 :
수락이 작업을 것처럼 보였다. 그렇지 않으면 취소 할 것입니다. – Avamander