2014-07-19 7 views
10

Zintegrowaliśmy tylko PagerSlidingTabStrips z Icons. Ale I selector na ikonach nie działa z PagerSlidingTabStrips.Ikona wyboru nie działa z PagerSlidingTabStrips

xml

<PagerSlidingTabStrip 
    android:id="@+id/pager_sliding_tab_strip" 
    android:layout_width="fill_parent" 
    android:layout_height="45dip" 
    android:background="@color/white" 
    app:pstsDividerColor="#FFFFA500" 
    app:pstsIndicatorColor="#FFFFA500" 
    app:pstsTabPaddingLeftRight="14dip" 
    app:pstsUnderlineColor="#FFFFA500" /> 

Dodany implements IconTabProvider na mój ViewPager który działa idealnie.

public class ViewPagerAdapter extends FragmentPagerAdapter implements IconTabProvider { 
    final int PAGE_COUNT = 3; 
    private final int[] ICONS = { R.drawable.tab_icon_zname_contacts_selector, R.drawable.tab_icon_zname_friends_selector, 
     R.drawable.tab_icon_zname_call_log_selector }; 

    @Override 
    public int getPageIconResId(int position) { 
     return ICONS[position]; 
    } 
} 

iconSelector

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:drawable="@drawable/tab_icon_zname_call_log_selected" android:state_selected="true"/> 
    <item android:drawable="@drawable/tab_icon_zname_call_log" android:state_selected="false"/> 

</selector> 

Jak dokonać wyboru ikon praca z PagerSlidingTabStrips? Gdy ta karta jest wybrana, chciałem mieć ikonę z kolorem pomarańczowym, ale zwraca ona kolor szary tylko bez względu na wszystko.

Result I'm getting

+1

Jak dodać ikony zamiast tekstu w pagerslidingtabStrip? – Dory

+0

Skąd wziął się "IconTabProvider"? Nie było to w 'PagerSlidingTabStrip.java'. – Azurespot

Odpowiedz

16

Znalazłem poprawkę Icon_Selector dla PagerSlidingTabStrips w nim zamknęły się problemy.

Modyfikacja PagerSlidingTabStrips.java i dodać po kodzie

private int currentPageSelected = 0; //Fix : ICON SELECTOR 

Dołączanie na NotifyDataSetChanged sposób wewnątrz OnGlobalLayoutListener

currentPosition = pager.getCurrentItem(); 
    tabsContainer.getChildAt(currentPosition).setSelected(true); //ADDED THESE 
    scrollToChild(currentPosition, 0); 

zmodyfikowane onPageSelected():

@Override 
public void onPageSelected(int position) { 
tabsContainer.getChildAt(currentPageSelected).setSelected(false); 
currentPageSelected = position; 
tabsContainer.getChildAt(position).setSelected(true); 

if (delegatePageListener != null) { 
    delegatePageListener.onPageSelected(position 
} 
} 

IconSelector

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:drawable="@drawable/tab_icon_zname_call_log_selected" android:state_selected="true"/> 
<item android:drawable="@drawable/tab_icon_zname_call_log_selected" android:state_pressed="true"/> 
<item android:drawable="@drawable/tab_icon_zname_call_log"/> 
    </selector> 

PagerSlidingTabStrips with Icon Selector

PagerSlidingTabStrips.java

import java.util.Locale; 

import android.annotation.SuppressLint; 
import android.content.Context; 
import android.content.res.TypedArray; 
import android.graphics.Canvas; 
import android.graphics.Paint; 
import android.graphics.Paint.Style; 
import android.graphics.Typeface; 
import android.os.Build; 
import android.os.Parcel; 
import android.os.Parcelable; 
import android.support.v4.view.ViewPager; 
import android.support.v4.view.ViewPager.OnPageChangeListener; 
import android.util.AttributeSet; 
import android.util.DisplayMetrics; 
import android.util.TypedValue; 
import android.view.Gravity; 
import android.view.View; 
import android.view.ViewTreeObserver.OnGlobalLayoutListener; 
import android.widget.HorizontalScrollView; 
import android.widget.ImageButton; 
import android.widget.LinearLayout; 
import android.widget.TextView; 

import com.netdoers.zname.R; 

public class PagerSlidingTabStrip extends HorizontalScrollView { 

    public interface IconTabProvider { 
     public int getPageIconResId(int position); 
    } 

    // @formatter:off 
    private static final int[] ATTRS = new int[] { 
     android.R.attr.textSize, 
     android.R.attr.textColor 
    }; 
    // @formatter:on 

    private LinearLayout.LayoutParams defaultTabLayoutParams; 
    private LinearLayout.LayoutParams expandedTabLayoutParams; 

    private final PageListener pageListener = new PageListener(); 
    public OnPageChangeListener delegatePageListener; 

    private LinearLayout tabsContainer; 
    private ViewPager pager; 

    private int tabCount; 

    private int currentPosition = 0; 
    private float currentPositionOffset = 0f; 

    private Paint rectPaint; 
    private Paint dividerPaint; 

    private int currentPageSelected = 0; //Fix : ICON SELECTOR 

    private int indicatorColor = 0xFF666666; 
    private int underlineColor = 0x1A000000; 
    private int dividerColor = 0x1A000000; 

    private boolean shouldExpand = false; 
    private boolean textAllCaps = true; 

    private int scrollOffset = 52; 
    private int indicatorHeight = 8; 
    private int underlineHeight = 2; 
    private int dividerPadding = 12; 
    private int tabPadding = 24; 
    private int dividerWidth = 1; 

    private int tabTextSize = 12; 
    private int tabTextColor = 0xFF666666; 
    private Typeface tabTypeface = null; 
    private int tabTypefaceStyle = Typeface.BOLD; 

    private int lastScrollX = 0; 

    private int tabBackgroundResId = R.drawable.background_tab; 

    private Locale locale; 

    public PagerSlidingTabStrip(Context context) { 
     this(context, null); 
    } 

    public PagerSlidingTabStrip(Context context, AttributeSet attrs) { 
     this(context, attrs, 0); 
    } 

    public PagerSlidingTabStrip(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 

     setFillViewport(true); 
     setWillNotDraw(false); 

     tabsContainer = new LinearLayout(context); 
     tabsContainer.setOrientation(LinearLayout.HORIZONTAL); 
     tabsContainer.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
     addView(tabsContainer); 

     DisplayMetrics dm = getResources().getDisplayMetrics(); 

     scrollOffset = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, scrollOffset, dm); 
     indicatorHeight = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, indicatorHeight, dm); 
     underlineHeight = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, underlineHeight, dm); 
     dividerPadding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dividerPadding, dm); 
     tabPadding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, tabPadding, dm); 
     dividerWidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dividerWidth, dm); 
     tabTextSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, tabTextSize, dm); 

     // get system attrs (android:textSize and android:textColor) 

     TypedArray a = context.obtainStyledAttributes(attrs, ATTRS); 

     tabTextSize = a.getDimensionPixelSize(0, tabTextSize); 
     tabTextColor = a.getColor(1, tabTextColor); 

     a.recycle(); 

     // get custom attrs 

     a = context.obtainStyledAttributes(attrs, R.styleable.PagerSlidingTabStrip); 

     indicatorColor = a.getColor(R.styleable.PagerSlidingTabStrip_pstsIndicatorColor, indicatorColor); 
     underlineColor = a.getColor(R.styleable.PagerSlidingTabStrip_pstsUnderlineColor, underlineColor); 
     dividerColor = a.getColor(R.styleable.PagerSlidingTabStrip_pstsDividerColor, dividerColor); 
     indicatorHeight = a.getDimensionPixelSize(R.styleable.PagerSlidingTabStrip_pstsIndicatorHeight, indicatorHeight); 
     underlineHeight = a.getDimensionPixelSize(R.styleable.PagerSlidingTabStrip_pstsUnderlineHeight, underlineHeight); 
     dividerPadding = a.getDimensionPixelSize(R.styleable.PagerSlidingTabStrip_pstsDividerPadding, dividerPadding); 
     tabPadding = a.getDimensionPixelSize(R.styleable.PagerSlidingTabStrip_pstsTabPaddingLeftRight, tabPadding); 
     tabBackgroundResId = a.getResourceId(R.styleable.PagerSlidingTabStrip_pstsTabBackground, tabBackgroundResId); 
     shouldExpand = a.getBoolean(R.styleable.PagerSlidingTabStrip_pstsShouldExpand, shouldExpand); 
     scrollOffset = a.getDimensionPixelSize(R.styleable.PagerSlidingTabStrip_pstsScrollOffset, scrollOffset); 
     textAllCaps = a.getBoolean(R.styleable.PagerSlidingTabStrip_pstsTextAllCaps, textAllCaps); 

     a.recycle(); 

     rectPaint = new Paint(); 
     rectPaint.setAntiAlias(true); 
     rectPaint.setStyle(Style.FILL); 

     dividerPaint = new Paint(); 
     dividerPaint.setAntiAlias(true); 
     dividerPaint.setStrokeWidth(dividerWidth); 

     defaultTabLayoutParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); 
     expandedTabLayoutParams = new LinearLayout.LayoutParams(0, LayoutParams.MATCH_PARENT, 1.0f); 

     if (locale == null) { 
      locale = getResources().getConfiguration().locale; 
     } 
    } 

    public void setViewPager(ViewPager pager) { 
     this.pager = pager; 

     if (pager.getAdapter() == null) { 
      throw new IllegalStateException("ViewPager does not have adapter instance."); 
     } 

     pager.setOnPageChangeListener(pageListener); 

     notifyDataSetChanged(); 
    } 

    public void setOnPageChangeListener(OnPageChangeListener listener) { 
     this.delegatePageListener = listener; 
    } 

    public void notifyDataSetChanged() { 

     tabsContainer.removeAllViews(); 

     tabCount = pager.getAdapter().getCount(); 

     for (int i = 0; i < tabCount; i++) { 

      if (pager.getAdapter() instanceof IconTabProvider) { 
       addIconTab(i, ((IconTabProvider) pager.getAdapter()).getPageIconResId(i)); 
      } else { 
       addTextTab(i, pager.getAdapter().getPageTitle(i).toString()); 
      } 

     } 

     updateTabStyles(); 

     getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 

      @SuppressWarnings("deprecation") 
      @SuppressLint("NewApi") 
      @Override 
      public void onGlobalLayout() { 

       if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { 
        getViewTreeObserver().removeGlobalOnLayoutListener(this); 
       } else { 
        getViewTreeObserver().removeOnGlobalLayoutListener(this); 
       } 

       currentPosition = pager.getCurrentItem(); 
       tabsContainer.getChildAt(currentPosition).setSelected(true);//Fix : ICON SELECTOR 
       scrollToChild(currentPosition, 0); 
      } 
     }); 

    } 

    private void addTextTab(final int position, String title) { 

     TextView tab = new TextView(getContext()); 
     tab.setText(title); 
     tab.setGravity(Gravity.CENTER); 
     tab.setSingleLine(); 

     addTab(position, tab); 
    } 

    private void addIconTab(final int position, int resId) { 

     ImageButton tab = new ImageButton(getContext()); 
     tab.setImageResource(resId); 

     addTab(position, tab); 

    } 

    private void addTab(final int position, View tab) { 
     tab.setFocusable(true); 
     tab.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       pager.setCurrentItem(position); 
      } 
     }); 

     tab.setPadding(tabPadding, 0, tabPadding, 0); 
     tabsContainer.addView(tab, position, shouldExpand ? expandedTabLayoutParams : defaultTabLayoutParams); 
    } 

    private void updateTabStyles() { 

     for (int i = 0; i < tabCount; i++) { 

      View v = tabsContainer.getChildAt(i); 

      v.setBackgroundResource(tabBackgroundResId); 

      if (v instanceof TextView) { 

       TextView tab = (TextView) v; 
       tab.setTextSize(TypedValue.COMPLEX_UNIT_PX, tabTextSize); 
       tab.setTypeface(tabTypeface, tabTypefaceStyle); 
       tab.setTextColor(tabTextColor); 

       // setAllCaps() is only available from API 14, so the upper case is made manually if we are on a 
       // pre-ICS-build 
       if (textAllCaps) { 
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { 
         tab.setAllCaps(true); 
        } else { 
         tab.setText(tab.getText().toString().toUpperCase(locale)); 
        } 
       } 
      } 
     } 

    } 

    private void scrollToChild(int position, int offset) { 

     if (tabCount == 0) { 
      return; 
     } 

     int newScrollX = tabsContainer.getChildAt(position).getLeft() + offset; 

     if (position > 0 || offset > 0) { 
      newScrollX -= scrollOffset; 
     } 

     if (newScrollX != lastScrollX) { 
      lastScrollX = newScrollX; 
      scrollTo(newScrollX, 0); 
     } 

    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 

     if (isInEditMode() || tabCount == 0) { 
      return; 
     } 

     final int height = getHeight(); 

     // draw indicator line 

     rectPaint.setColor(indicatorColor); 

     // default: line below current tab 
     View currentTab = tabsContainer.getChildAt(currentPosition); 
     float lineLeft = currentTab.getLeft(); 
     float lineRight = currentTab.getRight(); 

     // if there is an offset, start interpolating left and right coordinates between current and next tab 
     if (currentPositionOffset > 0f && currentPosition < tabCount - 1) { 

      View nextTab = tabsContainer.getChildAt(currentPosition + 1); 
      final float nextTabLeft = nextTab.getLeft(); 
      final float nextTabRight = nextTab.getRight(); 

      lineLeft = (currentPositionOffset * nextTabLeft + (1f - currentPositionOffset) * lineLeft); 
      lineRight = (currentPositionOffset * nextTabRight + (1f - currentPositionOffset) * lineRight); 
     } 

     canvas.drawRect(lineLeft, height - indicatorHeight, lineRight, height, rectPaint); 

     // draw underline 

     rectPaint.setColor(underlineColor); 
     canvas.drawRect(0, height - underlineHeight, tabsContainer.getWidth(), height, rectPaint); 

     // draw divider 

     dividerPaint.setColor(dividerColor); 
     for (int i = 0; i < tabCount - 1; i++) { 
      View tab = tabsContainer.getChildAt(i); 
      canvas.drawLine(tab.getRight(), dividerPadding, tab.getRight(), height - dividerPadding, dividerPaint); 
     } 
    } 

    private class PageListener implements OnPageChangeListener { 

     @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

      currentPosition = position; 
      currentPositionOffset = positionOffset; 

      scrollToChild(position, (int) (positionOffset * tabsContainer.getChildAt(position).getWidth())); 

      invalidate(); 

      if (delegatePageListener != null) { 
       delegatePageListener.onPageScrolled(position, positionOffset, positionOffsetPixels); 
      } 
     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 
      if (state == ViewPager.SCROLL_STATE_IDLE) { 
       scrollToChild(pager.getCurrentItem(), 0); 
      } 

      if (delegatePageListener != null) { 
       delegatePageListener.onPageScrollStateChanged(state); 
      } 
     } 

     @Override 
     public void onPageSelected(int position) { 
      /** 
      * Fix : ICON SELECTOR 
      */ 
      tabsContainer.getChildAt(currentPageSelected).setSelected(false); 
      currentPageSelected = position; 
      tabsContainer.getChildAt(position).setSelected(true); 
      /** 
      * Fix : ICON SELECTOR 
      */ 

      if (delegatePageListener != null) { 
       delegatePageListener.onPageSelected(position); 
      } 
     } 

    } 

    public void setIndicatorColor(int indicatorColor) { 
     this.indicatorColor = indicatorColor; 
     invalidate(); 
    } 

    public void setIndicatorColorResource(int resId) { 
     this.indicatorColor = getResources().getColor(resId); 
     invalidate(); 
    } 

    public int getIndicatorColor() { 
     return this.indicatorColor; 
    } 

    public void setIndicatorHeight(int indicatorLineHeightPx) { 
     this.indicatorHeight = indicatorLineHeightPx; 
     invalidate(); 
    } 

    public int getIndicatorHeight() { 
     return indicatorHeight; 
    } 

    public void setUnderlineColor(int underlineColor) { 
     this.underlineColor = underlineColor; 
     invalidate(); 
    } 

    public void setUnderlineColorResource(int resId) { 
     this.underlineColor = getResources().getColor(resId); 
     invalidate(); 
    } 

    public int getUnderlineColor() { 
     return underlineColor; 
    } 

    public void setDividerColor(int dividerColor) { 
     this.dividerColor = dividerColor; 
     invalidate(); 
    } 

    public void setDividerColorResource(int resId) { 
     this.dividerColor = getResources().getColor(resId); 
     invalidate(); 
    } 

    public int getDividerColor() { 
     return dividerColor; 
    } 

    public void setUnderlineHeight(int underlineHeightPx) { 
     this.underlineHeight = underlineHeightPx; 
     invalidate(); 
    } 

    public int getUnderlineHeight() { 
     return underlineHeight; 
    } 

    public void setDividerPadding(int dividerPaddingPx) { 
     this.dividerPadding = dividerPaddingPx; 
     invalidate(); 
    } 

    public int getDividerPadding() { 
     return dividerPadding; 
    } 

    public void setScrollOffset(int scrollOffsetPx) { 
     this.scrollOffset = scrollOffsetPx; 
     invalidate(); 
    } 

    public int getScrollOffset() { 
     return scrollOffset; 
    } 

    public void setShouldExpand(boolean shouldExpand) { 
     this.shouldExpand = shouldExpand; 
     requestLayout(); 
    } 

    public boolean getShouldExpand() { 
     return shouldExpand; 
    } 

    public boolean isTextAllCaps() { 
     return textAllCaps; 
    } 

    public void setAllCaps(boolean textAllCaps) { 
     this.textAllCaps = textAllCaps; 
    } 

    public void setTextSize(int textSizePx) { 
     this.tabTextSize = textSizePx; 
     updateTabStyles(); 
    } 

    public int getTextSize() { 
     return tabTextSize; 
    } 

    public void setTextColor(int textColor) { 
     this.tabTextColor = textColor; 
     updateTabStyles(); 
    } 

    public void setTextColorResource(int resId) { 
     this.tabTextColor = getResources().getColor(resId); 
     updateTabStyles(); 
    } 

    public int getTextColor() { 
     return tabTextColor; 
    } 

    public void setTypeface(Typeface typeface, int style) { 
     this.tabTypeface = typeface; 
     this.tabTypefaceStyle = style; 
     updateTabStyles(); 
    } 

    public void setTabBackground(int resId) { 
     this.tabBackgroundResId = resId; 
    } 

    public int getTabBackground() { 
     return tabBackgroundResId; 
    } 

    public void setTabPaddingLeftRight(int paddingPx) { 
     this.tabPadding = paddingPx; 
     updateTabStyles(); 
    } 

    public int getTabPaddingLeftRight() { 
     return tabPadding; 
    } 

    @Override 
    public void onRestoreInstanceState(Parcelable state) { 
     SavedState savedState = (SavedState) state; 
     super.onRestoreInstanceState(savedState.getSuperState()); 
     currentPosition = savedState.currentPosition; 
     requestLayout(); 
    } 

    @Override 
    public Parcelable onSaveInstanceState() { 
     Parcelable superState = super.onSaveInstanceState(); 
     SavedState savedState = new SavedState(superState); 
     savedState.currentPosition = currentPosition; 
     return savedState; 
    } 

    static class SavedState extends BaseSavedState { 
     int currentPosition; 

     public SavedState(Parcelable superState) { 
      super(superState); 
     } 

     private SavedState(Parcel in) { 
      super(in); 
      currentPosition = in.readInt(); 
     } 

     @Override 
     public void writeToParcel(Parcel dest, int flags) { 
      super.writeToParcel(dest, flags); 
      dest.writeInt(currentPosition); 
     } 

     public static final Parcelable.Creator<SavedState> CREATOR = new Parcelable.Creator<SavedState>() { 
      @Override 
      public SavedState createFromParcel(Parcel in) { 
       return new SavedState(in); 
      } 

      @Override 
      public SavedState[] newArray(int size) { 
       return new SavedState[size]; 
      } 
     }; 
    } 

} 

ViewPagerAdapter.java które musimy dostarczyć do ViewPager

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 

import com.netdoers.zname.R; 
import com.netdoers.zname.utils.PagerSlidingTabStrip.IconTabProvider; 

/** 
* @author Vikalp Patel ([email protected]) 
* @category Ui Helper 
* 
*/ 
public class ViewPagerAdapter extends FragmentPagerAdapter 
/** 
* PAGERSLIDINGTABSTIPS 
*/ 
implements IconTabProvider 
{ 
    // Declare the number of ViewPager pages 
// final int PAGE_COUNT = 5; 
    final int PAGE_COUNT = 3; 

    /** 
    * PAGERSLIDINGTABSTRIPS 
    */ 
    private final int[] ICONS = { R.drawable.tab_icon_zname_contact_selector, R.drawable.tab_icon_zname_friends_selector, 
      R.drawable.tab_icon_zname_call_log_selector }; 
    /** 
    * SLIDINGTABLAYOUT 
    */ 
    /*private int[] imageResId = { 
      R.drawable.tab_icon_zname_contact_selector, 
      R.drawable.tab_icon_zname_friends_selector, 
      R.drawable.tab_icon_zname_call_log_selected 
    }; 

    @Override 
    public CharSequence getPageTitle(int position) { 
     Drawable image = Zname.getApplication().getApplicationContext().getResources().getDrawable(imageResId[position]); 
     image.setBounds(0, 0, image.getIntrinsicWidth(), image.getIntrinsicHeight()); 
     SpannableString sb = new SpannableString(" "); 
     ImageSpan imageSpan = new ImageSpan(image, ImageSpan.ALIGN_BOTTOM); 
     sb.setSpan(imageSpan, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
     return sb; 
    }*/ 
    /** 
    * SLIDINGTABLAYOUT 
    */ 

    /** 
    * @param fm 
    */ 
    public ViewPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    /* (non-Javadoc) 
    * @see android.support.v4.app.FragmentPagerAdapter#getItem(int) 
    */ 
    @Override 
    public Fragment getItem(int item) { 
     switch (item) { 

      // Open HomeFragment.java 
     case 0: 
      ContactsFragment homeFragment = new ContactsFragment(); 
      return homeFragment; 
      // Open PlaceOrderFragment.java 
     case 1: 
      GroupsFragment groupsFragment = new GroupsFragment(); 
      return groupsFragment; 
     case 2: 
      CallLogsFragment callLogsFragment = new CallLogsFragment(); 
      return callLogsFragment; 
      } 
     return null; 
    } 

    /* (non-Javadoc) 
    * @see android.support.v4.view.PagerAdapter#getCount() 
    */ 
    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return PAGE_COUNT; 
    } 

    /** 
    * PAGERSLIDINGTABSTRIPS 
    */ 
    @Override 
    public int getPageIconResId(int position) { 
     // TODO Auto-generated method stub 
     return ICONS[position]; 
    } 

} 
+0

Działa jak wdzięk –

+0

Miałem propblem z SlidingTabsColorFragment, tylko zaktualizowałem onPageSelected w podobny sposób i wszystko działało zgodnie z przeznaczeniem. – Warpzit

+0

To wygląda niesamowicie, ale nie może go uruchomić. Nie ma 'onNotifyDataSetChanged', miałeś na myśli' notifyDataSetChanged() '? Prawdopodobnie. A gdzie wstawiasz ten kod? Mam go zaraz po 'tabsContainer.removeAllViews();'. Nic jednak nie działa. Podłączyłem plik selektora rysunków, taki jak ten 'custom: pstsTabBackground =" @ drawable/tabs_selector "', ale nic. Jakieś pomysły? Dzięki. – Azurespot

4

twardego sposób to zrobić ...

// Give the PagerSlidingTabStrip the ViewPager 
tabsStrip = (PagerSlidingTabStrip) findViewById(R.id.tabs); 
// Attach the view pager to the tab strip 
tabsStrip.setViewPager(mViewPager); 

Field field = null; 
try { 
    field = PagerSlidingTabStrip.class.getDeclaredField("tabsContainer"); 
    field.setAccessible(true); 
    LinearLayout tabsContainer = (LinearLayout) field.get(tabsStrip); 
    tabsContainer.getChildAt(0).setSelected(true); 

} catch (NoSuchFieldException e) { 
    e.printStackTrace(); 
} catch (IllegalAccessException e) { 
    e.printStackTrace(); 
} 

tabsStrip.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 

    private int currentPageSelected = 0; 

    @Override 
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

    } 

    @Override 
    public void onPageSelected(int position) { 
     Log.v("onPageSelected", tabsStrip.getClass().toString()); 

     Field field = null; 
     try { 
      field = PagerSlidingTabStrip.class.getDeclaredField("tabsContainer"); 
      field.setAccessible(true); 
      LinearLayout tabsContainer = (LinearLayout) field.get(tabsStrip); 
      tabsContainer.getChildAt(currentPageSelected).setSelected(false); 
      currentPageSelected = position; 
      tabsContainer.getChildAt(position).setSelected(true); 

     } catch (NoSuchFieldException e) { 
      e.printStackTrace(); 
     } catch (IllegalAccessException e) { 
      e.printStackTrace(); 
     } 


    } 

    @Override 
    public void onPageScrollStateChanged(int state) { 

    } 
}); 
+0

Dzięki alot mate – satyapol

+1

Dobra robota (Y). Czy możesz mi powiedzieć, jak dodać tekst również za pomocą tych ikon? –

1

Wystarczy dodać aplikację: pstsTabSwitch = "true" do PagerSlidingTabStrip:

    <com.astuetz.PagerSlidingTabStrip 
        android:id="@+id/tabs" 
        app:pstsShouldExpand="true" 
        android:layout_width="150dp" 
        android:layout_height="match_parent" 
        android:textSize="28sp" 
        app:pstsIndicatorColor="#2F041F" 
        app:pstsIndicatorHeight="2dp" 
        app:pstsTabPaddingLeftRight="14dp" 
        app:pstsTabSwitch="true"/> 

Mój adapter:

SampleFragmentPagerAdapter extends FragmentPagerAdapter implements PagerSlidingTabStrip.IconTabProvider { 

private int TAB_ICONS[] = {R.drawable.io_logo, R.drawable.ic_chat_tab_unactive}; 
private final int[] SWITCH_ICONS = { R.drawable.tab_one, R.drawable.tab_two}; 

public SampleFragmentPagerAdapter(FragmentManager fm) { 
    super(fm); 
} 

@Override 
public int getCount() { 
    return TAB_ICONS.length; 
} 

@Override 
public Fragment getItem(int position) { 
    if(position == 0){ 
     return new SwipeFragment(); 
    } else { 
     return new ConversationsFragment(); 
    } 
} 


@Override 
public int getPageIconResId(int position) { 
    return SWITCH_ICONS[position]; 
} 

}

Moja selektor

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_checked="true" android:drawable="@drawable/io_title" /> 
    <item android:state_pressed="true" android:drawable="@drawable/io_logo"/> 
    <item android:state_selected="true" android:drawable="@drawable/io_logo"/> 
    <item android:drawable="@drawable/io_title" /> 
</selector> 
+0

To działa dla mnie – Marzouk

Powiązane problemy