支持问题:设计:23.0.0和带选项卡自定义视图的setOnTabSelectedListener

时间:2015-08-20 00:44:27

标签: android android-viewpager android-tabs android-design-library

使用android.support:design:23.0.0。 setOnTabSelectedListener仅在我单击选项卡时触发,但是当我滑动时它不会被ViewPager触发。

让我举个例子:

 public void setTabs() {

    tabs = (TabLayout) findViewById(R.id.tabs);
    tabs.setupWithViewPager(pager);

    for (int i = 0; i < tabs.getTabCount(); i++) {
        TabLayout.Tab tab = tabs.getTabAt(i);
        tab.setCustomView(pagerAdapter.getTabView(i));
    }

  tabs.setOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(pager) {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {

            super.onTabSelected(tab);
            tabPosition = tab.getPosition();

            Toast.makeText(getApplicationContext(), ""+tabPosition,Toast.LENGTH_SHORT).show();

            if (tabPosition == 0) {

            }
            if (tabPosition == 1) {

            }
            if (tabPosition == 2) {

            }
            if (tabPosition == 3) {

            }
        }

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

        @Override
        public void onTabReselected(TabLayout.Tab tab) {
        }
    });
}
来自pagerAdapter的

getTabView方法:

 public View getTabView(int position) {

        View v = LayoutInflater.from(getApplicationContext()).inflate(R.layout.custom_tab, null);
        // TextView tv = (TextView) v.findViewById(R.id.tabTextView);
        // tv.setText(tabTitles[position]);
        ImageView img = (ImageView) v.findViewById(R.id.tabImageView);
        img.setImageResource(imageResId[position]);

        return v;
    }

仅在点击时才会在滑动时显示Toast。它适用于旧的22.2.1 revison。是什么导致了这个问题?感谢。

2 个答案:

答案 0 :(得分:2)

你是对的。我遇到了同样的问题,有时甚至在单击选项卡时也不会触发标签。我通过使用两者来修复它:   public void onTabSelected(TabLayout.Tab tab)    和public void onTabReselected(TabLayout.Tab选项卡)方法。然后我切换回android.support:design:22.2.1库让它干净利落。

答案 1 :(得分:0)

现在已经修复了新版本(23.0.1)。