2017-01-25 6 views
0

Мое приложение использует подключенное устройство Bluetooth, которое отправляет ему события, поэтому, когда я получаю событие от устройства BLE, я должен что-то делать. Также я создал внутренний класс, который реализует OnPageChangeListener, и я также использую класс для скользящих вкладок. Моя цель - «продвигаться вперед» через вкладки, когда я получаю событие. например, если я остаюсь на вкладке 1, я хочу перейти на вкладку 2 и так далее.Класс, реализующий OnPageChangeListener

Как я могу это сделать с помощью своего класса? я сомневаюсь: какой метод мне нужно вызвать для изменения вкладки?

Это внутренний класс, который реализует OnPageChangeListener

private class InternalViewPagerListener implements ViewPager.OnPageChangeListener { 
    private int mScrollState; 

    @Override 
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
     int tabStripChildCount = mTabStrip.getChildCount(); 
     if ((tabStripChildCount == 0) || (position < 0) || (position >= tabStripChildCount)) { 
      return; 
     } 

     mTabStrip.onViewPagerPageChanged(position, positionOffset); 

     View selectedTitle = mTabStrip.getChildAt(position); 
     int extraOffset = (selectedTitle != null) 
       ? (int) (positionOffset * selectedTitle.getWidth()) 
       : 0; 
     scrollToTab(position, extraOffset); 

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

    @Override 
    public void onPageScrollStateChanged(int state) { 
     mScrollState = state; 

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

    @Override 
    public void onPageSelected(int position) { 
     if (mScrollState == ViewPager.SCROLL_STATE_IDLE) { 
      mTabStrip.onViewPagerPageChanged(position, 0f); 
      scrollToTab(position, 0); 
     } 

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

} 

private class TabClickListener implements View.OnClickListener { 
    @Override 
    public void onClick(View v) { 
     for (int i = 0; i < mTabStrip.getChildCount(); i++) { 
      if (v == mTabStrip.getChildAt(i)) { 
       mViewPager.setCurrentItem(i); 
       return; 
      } 
     } 
    } 
} 

я также этот метод:

public void scrollToTab(int tabIndex, int positionOffset) { 
    final int tabStripChildCount = mTabStrip.getChildCount(); 
    if (tabStripChildCount == 0 || tabIndex < 0 || tabIndex >= tabStripChildCount) { 
     return; 
    } 

    View selectedChild = mTabStrip.getChildAt(tabIndex); 
    if (selectedChild != null) { 
     int targetScrollX = selectedChild.getLeft() + positionOffset; 

     if (tabIndex > 0 || positionOffset > 0) { 
      // If we're not at the first child and are mid-scroll, make sure we obey the offset 
      targetScrollX -= mTitleOffset; 
     } 

     scrollTo(targetScrollX, 0); 
    } 
} 

ответ

1

Вы можете использовать viewPager.setCurrentItem() изменить вкладку.

Например, предположим, что вы хотите, чтобы перейти к следующей вкладке по нажатию кнопки:

private void onClick(){ 
    viewPager.setCurrentItem(viewPager.getCurrentItem() + 1); 
} 

Теперь это viewPager.getCurrentItem() получит вам количество текущих вкладок и +1 установит текущий элемент к следующему пункту.

+0

Спасибо! Это сработало – mychemicalro

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