【问题标题】:Facing Issue with Android TabLayout Tabs ClickAndroid TabLayout 标签点击面临的问题
【发布时间】:2016-08-17 21:20:24
【问题描述】:

我实现了一个TabLayout 具有三个选项卡。当我滑动页面时一切正常,当我只使用标签点击导航时它也可以工作。但是当我滑动页面并单击任何先前选择的选项卡时出现问题,只有选项卡指示器更改为新选项卡,但文本突出显示并且页面没有更改。

我检查了TabLayout的点击监听,在上述情况下没有执行。

更多信息:

minSdk:16
targetSdk:24

我尝试了支持库 24.0.0 和 24.1.1

TabSelectedListener。

        tabs.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            tabPages.setCurrentItem(tab.getPosition());
        }

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

        }

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

        }
    });

PagerAdapter

public class TabPageAdapter extends FragmentStatePagerAdapter {
public TabPageAdapter(FragmentManager fm) {
    super(fm);
}

@Override
public Fragment getItem(int position) {
    Fragment f1 = new Fragment1();
    Fragment f2 = new Fragment2();
    Fragment f3 = new Fragment3();

    switch (position) {
        case 0:
            return f1;
        case 1:
            return f2;
        case 2:
            return f3;
    }
    return null;
}


@Override
public int getCount() {
    return 3;
}

}

【问题讨论】:

  • @SangramHaladkar 添加了 tabSelectedListener。
  • 发布您的PagerAdapter 代码?
  • @Bryan 有密码

标签: android android-tablayout


【解决方案1】:

您可以完全避免使用OnTabSelectedListener,TabLayout 对此有一个convenience method:

tabs.setupWithViewPager(tabPages);

【讨论】:

    【解决方案2】:
    TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
            tabLayout.addTab(tabLayout.newTab().setText("Comparison"));
            tabLayout.addTab(tabLayout.newTab().setText("Details"));
            tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
    
            final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
            final PagerAdapter adapter = new PagerAdapter
                    (getSupportFragmentManager(), tabLayout.getTabCount());
            viewPager.setAdapter(adapter);
            viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
            tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
                @Override
                public void onTabSelected(TabLayout.Tab tab) {
                    viewPager.setCurrentItem(tab.getPosition());
                }
    
                @Override
                public void onTabUnselected(TabLayout.Tab tab) {
    
                }
    
                @Override
                public void onTabReselected(TabLayout.Tab tab) {
    
                }
            });
    

    在活动中插入此代码。 在活动 xml 文件中添加以下代码

    <android.support.design.widget.TabLayout
            android:id="@+id/tab_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/colorM3signin"
            app:tabSelectedTextColor="@color/com_facebook_button_background_color_pressed"
            app:tabTextColor="@color/com_facebook_button_background_color_pressed"
            android:elevation="6dp"
            android:inputType="textCapCharacters"
            app:tabTextAppearance="@android:style/TextAppearance.Widget.TabWidget"
            app:tabIndicatorColor="@color/com_facebook_button_background_color_pressed"
            app:tabIndicatorHeight="5dp"
            android:minHeight="?attr/actionBarSize"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            android:layout_below="@+id/toolbar" />
    
        <android.support.v4.view.ViewPager
            android:id="@+id/pager"
            android:layout_width="match_parent"
            android:layout_height="fill_parent"
            android:layout_below="@id/tab_layout"/>
    

    检查这个 PagerAdapeter 类。

    public class PagerAdapter extends FragmentStatePagerAdapter {
        int mNumOfTabs;
    
        public PagerAdapter(FragmentManager fm, int NumOfTabs) {
            super(fm);
            this.mNumOfTabs = NumOfTabs;
        }
    
        @Override
        public Fragment getItem(int position) {
    
            switch (position) {
                case 0:
                    TabFragmentOne tab1 = new TabFragmentOne();
                    return tab1;
                case 1:
                    TabFragmentTwo tab2 = new TabFragmentTwo();
                    return tab2;
    
                default:
                    return null;
            }
        }
    
        @Override
        public int getCount() {
            return mNumOfTabs;
        }
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多