2016-03-30 13 views
1

私はViewPagerでTabLayoutを使用するには、また、私はTabReselectedイベントに耳を傾ける必要があり、彼らが競合しているようだ:TabLayoutのsetOnTabSelectedListenerは、そのsetupWithViewPagerと競合していますか?

mViewPager.setAdapter(...); 
mTabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
      @Override 
      public void onTabSelected(TabLayout.Tab tab) { 
       Toast.makeText(getActivity(), "selected...", Toast.LENGTH_LONG).show(); 
      } 

      @Override 
      public void onTabUnselected(TabLayout.Tab tab) { 

      } 

      @Override 
      public void onTabReselected(TabLayout.Tab tab) { 
       Toast.makeText(getActivity(), "reselected...", Toast.LENGTH_LONG).show(); 
      } 
}); 
mTabLayout.setupWithViewPager(mViewPager); 

私がsetupWithViewPager(mViewPager)を使用する場合、リスナーは意志の前に追加したようです無効である。重要なのは、タブが[再選択された]ときに他のことをする必要がありますが、どうすればいいですか?それはセットアップに時間がかかるよう

答えて

1

//がviewpagerで実行可能使用:

viewPager.setAdapter(viewpagerAdapter); 
    tabLayout.post(new Runnable() { 
     @Override 
     public void run() { 
      tabLayout.setupWithViewPager(viewPager); 

      tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
       @Override 
       public void onTabSelected(TabLayout.Tab tab) { 

        Toast.makeText(MainActivity.this, "selected...", Toast.LENGTH_LONG).show(); 
       } 

       @Override 
       public void onTabUnselected(TabLayout.Tab tab) { 

       } 

       @Override 
       public void onTabReselected(TabLayout.Tab tab) { 

        Toast.makeText(MainActivity.this, "reselected...", Toast.LENGTH_LONG).show(); 
       } 
      }); 
     } 
    }); 
+0

はい、動作します。副作用が出ています。 ViewPagerをスワイプすると、すべてが問題ありません。しかし、私はタブをクリックすると、通常、それはコンテンツを変更しますが、ここで私たちはonTabSelected関数で "viewPager.setCurrentItem(tab.getPosition()"を呼び出さなければなりません、ポイントはこのようにした場合、onTabReselected関数は。。とも呼ばれる –

0

何をする必要あり、最初のあなたはonTabSelected()方法で、その後

tabLayout.setupWithViewPager(onBoardVP); 

とを呼び出す必要があり、ただ、このようmViewPager.setCurrentItem(tab.getPosition());

を追加します。

@Override 
       public void onTabSelected(TabLayout.Tab tab) { 

        Toast.makeText(MainActivity.this, "selected...", Toast.LENGTH_LONG).show(); 
mViewPager.setCurrentItem(tab.getPosition()); 
       } 
+0

@Spykaranは、私が質問、 'tabLayout.setupWithViewPager(onBoardVP)に書いたように、いくつかの副作用が、正しいです;'動作しない以前に定義されたsetOnTabSelectedListenerを行います私たちはsetupWithViewPager' 'の後に' setOnTabSelectedListenerを '使用している場合、たぶん私は明確で、THX –

+0

はいていないです。setupWithViewPager'は動作しません 'ようです。もしsetupWithViewPager()あなたは、タブをタップするとき、私は意味。tabLayout.setOnTabSelectedListener()、setupWithViewPager()文句を言わない仕事を設定する前に実行され、断片viewPagerで切り替えることはありません。そのため、mViewPager.setCurrentItem(tab.getPosition());をonTabSelected()メソッドの内側に配置して、タブタップを切り替えて作業する必要があります。 –

関連する問題