2015-12-03 2 views
4

Предположим, что у меня есть класс MainActivity, где TabLayout и 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; 
     } 
    } 
} 

Все работает отлично с указанным кодом, но когда я добавляю setOnTabSelectedListener в onCreate с этим:

@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

Я подозреваю вызова,' 'в пределах onTabSelected' обратного вызова является причиной (бесконечная рекурсия). Я не верю, что вам нужно сказать, что viewpager изменился, все должно быть обработано, когда вы 'setupWithViewPager'. – cziemba

+0

Я уже пытаюсь удалить эту строку 'mViewPager.setCurrentItem (tab.getPosition());' но все же получил ошибку. – bernzkie

+0

Единственное, что работает, - это когда я удаляю эту строку 'tab.getIcon(). SetAlpha (255);', но мне нужно, чтобы это было 'setAlpha', чтобы' 255' и '127' были отменены. Я не знаю, какая именно ошибка. может быть, моя проблема заключается в настройке значка на каждой вкладке вместо текста? есть ли другой способ установить значок на каждой вкладке текста? – bernzkie

ответ

4

Хорошо, я думаю, теперь я понимаю, вы используете метод getIcon(), но вы никогда не установить значок с помощью setIcon() так вы возвращаете null на getIcon(). Вместо этого вы используете 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); 
     } 
    }); 

Тогда вы можете позвонить setupTabs() в вашем onCreate(): `mViewPager.setCurrentItem (tab.getPosition())

@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

Я отредактировал свой ответ, чтобы использовать интерфейс прослушивателя, который будет обрабатывать синхронизацию вкладок, но ваш код делает то же самое, что и интерфейс. Что касается размера значков, убедитесь, что ваши чертежи имеют правильную плотность, см.: [Этот ответ] (http://stackoverflow.com/a/31733134/4245330) – cziemba

+0

setOnTabSelectedListener устарел, вместо этого используйте addOnTabSelectedListener – juzamn

Смежные вопросы