Android-ViewPagerIndicator自定義tab數量
public void notifyDataSetChanged() { mTabLayout.removeAllViews(); PagerAdapter adapter = mViewPager.getAdapter(); IconPagerAdapter iconAdapter = null; if (adapter instanceof IconPagerAdapter) { iconAdapter = (IconPagerAdapter)adapter; } final int count = adapter.getCount(); for (int i = 0; i < count; i++) { CharSequence title = adapter.getPageTitle(i); if (title == null) { title = EMPTY_TITLE; } int iconResId = 0; if (iconAdapter != null) { iconResId = iconAdapter.getIconResId(i); } addTab(i, title, iconResId); } if (mSelectedTabIndex > count) { mSelectedTabIndex = count - 1; } setCurrentItem(mSelectedTabIndex); requestLayout(); }
我們理解一下:
mTabLayout.removeAllViews();
mTabLayout是什麼?
mTabLayout是IcsLinearLayout型別的,IcsLinearLayout是什麼東西?
察看原始碼就很容易看出來,IcsLinearLayout其實是放tab的容器,繼承LinearLayout,tab都放在這裡面展示。裡面封裝了tab的樣式:字型大小,顏色,間隔,分割線的樣式等等。不是很難就不介紹了。
notifyDataSetChanged的第一行就是mTabLayout.removeAllViews();清空所有的tab。
繼續看程式碼,PagerAdapter adapter = mViewPager.getAdapter();獲取了mViewPager
繼續
for (int i = 0; i < count; i++) {
CharSequence title =adapter.getPageTitle(i);
if (title == null) {
title = EMPTY_TITLE;
}
int iconResId = 0;
if (iconAdapter != null) {
iconResId =iconAdapter.getIconResId(i);
}
addTab(i, title, iconResId);
}
會將介面卡中的每個item都拿出來構建一個tab加入到mTabLayout中。
最後重新整理頁面。
主體思路:清空所有的tab,重新載入tab,到了這裡我們就知道怎麼實現類似網易新聞tab的功能了吧 。