2015-12-03 39 views
4

假设我有MainActivity类,其中TabLayoutViewPage r用对应的4页进行初始化。Android TabLayout setOnTabSelectedListener不工作

MainActivity.class

public class MainActivity extends AppCompatActivity { 
    private SectionsPagerAdapter mSectionsPagerAdapter; 
    private ViewPager mViewPager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 
     // Set up the ViewPager with the sections adapter. 
     mViewPager = (ViewPager) findViewById(R.id.pager); 
     mViewPager.setAdapter(mSectionsPagerAdapter); 

     // TabLayout 
     TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout); 
     tabLayout.setupWithViewPager(mViewPager); 
    } 

    public class SectionsPagerAdapter extends FragmentPagerAdapter { 
     public SectionsPagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 
     @Override 
     public Fragment getItem(int position) { 
      // getItem is called to instantiate the fragment for the given page. 
      // Return a PlaceholderFragment (defined as a static inner class below). 
      // return PlaceholderFragment.newInstance(position + 1); 
      switch (position) { 
       case 0: 
        ActivityZero tab0 = new ActivityZero(); 
        return tab0; 
       case 1: 
        ActivityOne tab1 = new ActivityOne(); 
        return tab1; 
       case 2: 
        ActivityTwo tab2 = new ActivityTwo(); 
        return tab2; 
       case 3: 
        ActivityThree tab3 = new ActivityThree(); 
        return tab3; 
       default: 
        return null; 
      } 
     } 
     @Override 
     public int getCount() { 
      // Show 4 total pages. 
      return 4; 
     } 
     //Setting the ICON 
     private int[] imageResId = { 
       R.drawable.ic_zero 
       R.drawable.ic_one, 
       R.drawable.ic_two, 
       R.drawable.ic_three 
     }; 
     @Override 
     public CharSequence getPageTitle(int position) { 
      Drawable image = ContextCompat.getDrawable(getApplicationContext(), 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; 
     } 
    } 
} 

一切工作正常与上面的代码,但是当我在onCreate添加setOnTabSelectedListener本:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 
     // Set up the ViewPager with the sections adapter. 
     mViewPager = (ViewPager) findViewById(R.id.pager); 
     mViewPager.setAdapter(mSectionsPagerAdapter); 

     // TabLayout 
     TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout); 
     tabLayout.setupWithViewPager(mViewPager); 

     //This is what i'm trying to add 
     mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 
     tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
      @Override 
      public void onTabSelected(TabLayout.Tab tab) { 
       mViewPager.setCurrentItem(tab.getPosition()); 
       tab.getIcon().setAlpha(255); 
      } 
      @Override 
      public void onTabUnselected(TabLayout.Tab tab) { 
       tab.getIcon().setAlpha(127); 
      } 
      @Override 
      public void onTabReselected(TabLayout.Tab tab) { 
      } 
     }); 
    } 

当我运行,一切都做工精细,但是当我滑动更改选项卡时,应用程序不再响应并开始崩溃。

我试图找到position的选定标签并将icon设置为setAlpha(127)selected page,但没有运气。

注:我使用支持库和我目前的API是8

UPDATE:

12-04 11:32:12.342 11884-11884/com.sample.app.mysampleapp E/InputEventReceiver: Exception dispatching input event. 
12-04 11:32:12.342 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI: java.lang.NullPointerException 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at com.sample.app.mysampleapp.MainActivity$1.onTabUnselected(MainActivity.java:53) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at android.support.design.widget.TabLayout.selectTab(TabLayout.java:867) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at android.support.design.widget.TabLayout$TabLayoutOnPageChangeListener.onPageSelected(TabLayout.java:1759) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at android.support.v4.view.ViewPager.dispatchOnPageSelected(ViewPager.java:1794) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at android.support.v4.view.ViewPager.scrollToItem(ViewPager.java:569) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:553) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at android.support.v4.view.ViewPager.onTouchEvent(ViewPager.java:2102) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at android.view.View.dispatchTouchEvent(View.java:7396) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2462) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2195) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2468) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2210) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2468) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2210) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2468) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2210) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2468) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2210) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2468) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2210) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2468) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2210) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2177) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1482) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at android.app.Activity.dispatchTouchEvent(Activity.java:2470) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2125) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at android.view.View.dispatchPointerEvent(View.java:7581) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3571) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3503) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4614) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4592) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4696) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:171) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at android.os.MessageQueue.nativePollOnce(Native Method) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at android.os.MessageQueue.next(MessageQueue.java:125) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at android.os.Looper.loop(Looper.java:138) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at android.app.ActivityThread.main(ActivityThread.java:4947) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at java.lang.reflect.Method.invokeNative(Native Method) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at java.lang.reflect.Method.invoke(Method.java:511) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 
12-04 11:32:12.402 11884-11884/com.sample.app.mysampleapp E/MessageQueue-JNI:  at dalvik.system.NativeStart.main(Native Method) 
12-04 11:32:12.412 11884-11884/com.sample.app.mysampleapp D/AndroidRuntime: Shutting down VM 
12-04 11:32:12.412 11884-11884/com.sample.app.mysampleapp W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x4131e2a0) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime: FATAL EXCEPTION: main 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime: java.lang.NullPointerException 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at com.sample.app.mysampleapp.MainActivity$1.onTabUnselected(MainActivity.java:53) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at android.support.design.widget.TabLayout.selectTab(TabLayout.java:867) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at android.support.design.widget.TabLayout$TabLayoutOnPageChangeListener.onPageSelected(TabLayout.java:1759) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at android.support.v4.view.ViewPager.dispatchOnPageSelected(ViewPager.java:1794) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at android.support.v4.view.ViewPager.scrollToItem(ViewPager.java:569) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:553) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at android.support.v4.view.ViewPager.onTouchEvent(ViewPager.java:2102) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at android.view.View.dispatchTouchEvent(View.java:7396) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2462) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2195) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2468) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2210) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2468) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2210) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2468) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2210) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2468) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2210) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2468) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2210) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2468) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2210) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2177) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1482) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at android.app.Activity.dispatchTouchEvent(Activity.java:2470) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2125) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at android.view.View.dispatchPointerEvent(View.java:7581) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3571) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3503) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4614) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4592) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4696) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:171) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at android.os.MessageQueue.nativePollOnce(Native Method) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at android.os.MessageQueue.next(MessageQueue.java:125) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at android.os.Looper.loop(Looper.java:138) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at android.app.ActivityThread.main(ActivityThread.java:4947) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at java.lang.reflect.Method.invokeNative(Native Method) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Method.java:511) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 
12-04 11:32:12.502 11884-11884/com.sample.app.mysampleapp E/AndroidRuntime:  at dalvik.system.NativeStart.main(Native Method) 

有人能帮助我在这里?非常感谢你。

+0

我怀疑调用'mViewPager.setCurrentItem(tab.getPosition());'内'onTabSelected'回调是原因(无限递归)。我不相信你需要告诉viewpager改变,应该在'setupWithViewPager'中处理。 – cziemba

+0

我已经尝试删除这行'mViewPager.setCurrentItem(tab.getPosition());'但仍然有错误。 – bernzkie

+0

唯一的工作是当我删除这行'tab.getIcon()。setAlpha(255);',但我需要'setAlpha'到'255'和'127'来取消选中。我不知道什么是错误。也许我的问题是在每个选项卡上设置图标而不是文本?有没有其他的方式来设置每个标签insteas文字图标? – bernzkie

回答

4

好吧,我想我现在明白了,你正在使用的方法getIcon()但你永远不通过setIcon()因此您会getIcon()返回null实际设置的图标。您正在使用getPageTitle()来显示图标,因此该选项卡甚至没有图标。

我建议做的就是修改getPageTitle()总是返回null,然后创建您的主要活动类选项卡设置方法setupTabs()这应该是这个样子:

private void setupTabs() { 
    mTabLayout.getTabAt(0).setIcon(mTabIcons[0]); 
    mTabLayout.getTabAt(1).setIcon(mTabIcons[1]); 
    mTabLayout.getTabAt(2).setIcon(mTabIcons[2]); 
    mTabLayout.getTabAt(2).setIcon(mTabIcons[3]); 
} 

同样来自适配器将您imageResId阵列出去活动:

private int[] mTabIcons = { 
    R.drawable.ic_zero 
    R.drawable.ic_one, 
    R.drawable.ic_two, 
    R.drawable.ic_three 
}; 

你也应该改变你的setOnTabSelectedListener使用TabLayout.ViewPagerOnTabSelectedListener,以便保持在标签同步为您处理:

tabLayout.setOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mViewPager) { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      super.onTabSelected(tab); 
      tab.getIcon().setAlpha(255); 
     } 
     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 
      super.onTabUnselected(tab); 
      tab.getIcon().setAlpha(127); 
     } 
    }); 

然后你就可以在你的onCreate()致电setupTabs()

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 
    // Set up the ViewPager with the sections adapter. 
    mViewPager = (ViewPager) findViewById(R.id.pager); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 

    // TabLayout 
    TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout); 
    tabLayout.setupWithViewPager(mViewPager); 

    // Set up our tab icons 
    setupTabs(); 

    //This is what i'm trying to add 
    mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 
    tabLayout.setOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mViewPager) { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      super.onTabSelected(tab); 
      tab.getIcon().setAlpha(255); 
     } 
     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 
      super.onTabUnselected(tab); 
      tab.getIcon().setAlpha(127); 
     } 
    }); 
} 
+0

好的,谢谢,但我遇到了一个问题。当我尝试这个时,图标很小。我不瘦我需要删除这个'mViewPager.setCurrentItem(tab.getPosition());',因为这将处理点击标签。 – bernzkie

+0

我编辑了我的回答,使用监听器接口来处理让你的选项卡保持同步,但是你的代码和接口完全一样。至于图标的大小,请确保您的drawable具有正确的密度,请参阅:[this answer](http://stackoverflow.com/a/31733134/4245330) – cziemba

+0

setOnTabSelectedListener已弃用,请改用addOnTabSelectedListener – juzamn