Android viewPager不响应选项卡单击

Android viewPager不响应选项卡单击,android,android-viewpager,android-tablayout,Android,Android Viewpager,Android Tablayout,这是我的活动 public class MainActivity extends AppCompatActivity { private ViewPager viewPager; private TabLayout tablayout; private int[] tableIcons = {android.R.drawable.ic_menu_camera, android.R.drawable.ic_menu_add, android.R.drawab

这是我的活动

public class MainActivity extends AppCompatActivity {
    private ViewPager viewPager;
    private TabLayout tablayout;
    private int[] tableIcons = {android.R.drawable.ic_menu_camera,
        android.R.drawable.ic_menu_add, android.R.drawable.ic_media_next};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        viewPager = (ViewPager) findViewById(R.id.viewpager);

        tablayout = (TabLayout) findViewById(R.id.tab);
        setUpwithviewpager(viewPager);
        tablayout.setupWithViewPager(viewPager);
        tablayout.getTabAt(0).setIcon(tableIcons[0]);
        tablayout.getTabAt(1).setIcon(tableIcons[1]);
        tablayout.getTabAt(2).setIcon(tableIcons[2]);
        tablayout.setTabMode(TabLayout.MODE_FIXED);
    }

    public void setUpwithviewpager(ViewPager viewpager) {
        ViewPageradapter adapter = new       ViewPageradapter(getSupportFragmentManager());
        adapter.addFragment(OneFragment.newInstance("1"), "one");
        adapter.addFragment(TwoFragment.newInstance("2"), "two");
        adapter.addFragment(ThreeFragment.newInstance("3"), "three");
        viewpager.setAdapter(adapter);
    }
}
这是布局xml文件

<android.support.design.widget.CoordinatorLayout   
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">    
    </android.support.design.widget.AppBarLayout>

    <android.support.design.widget.TabLayout
        android:id="@+id/tab"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabGravity="fill"
        app:tabMode="fixed"></android.support.design.widget.TabLayout>

    <android.support.v4.view.ViewPager
       android:id="@+id/viewpager"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       app:layout_behavior="@string/appbar_scrolling_view_behavior"></android.support.v4.view.ViewPager></android.support.design.widget.CoordinatorLayout>


更改viewpager时,我的TableLayout没有响应,单击选项卡时,viewpager也没有响应。我不知道为什么,我找不到解决此问题的方法。

您需要在选项卡布局中添加选项卡侦听器,在viewPager中添加onPageChangeListener。这通常是通过
ActionBar.TabListener
ViewPager.OnPageChangeListener
完成的。请参阅上的Android文章

你需要像这样的东西

// Create a tab listener that is called when the user changes tabs.
ActionBar.TabListener tabListener = new ActionBar.TabListener() {
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
        // When the tab is selected, switch to the
        // corresponding page in the ViewPager.
        viewpager.setCurrentItem(tab.getPosition());
    }

请尝试以下代码:

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) {

            }

        });

这个问题也影响了我好几个小时。对我起作用的是使我的
ViewPagerAdapter
扩展
FragmentStatePagerAdapter
而不是
FragmentPagerAdapter
。我希望这有帮助

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) {

            }

        });