当前位置: 首页 > 知识库问答 >
问题:

单击后,ViewPager不响应选项卡

段晨
2023-03-14

我试图在我的活动中添加一个带有片段的选项卡,但它没有响应或事件显示。

这是我下面的代码。

这是我的主要活动:

private void setupTabLayout() {
    TabLayout tabLayout = findViewById(R.id.tab_layout);
    tabLayout.addTab(tabLayout.newTab().setText("COMMENTS"));
    tabLayout.addTab(tabLayout.newTab().setText("ATTACHMENTS"));
    tabLayout.addTab(tabLayout.newTab().setText("AUDIT TRAIL"));
    tabLayout.addTab(tabLayout.newTab().setText("APPROVERS"));

    final ViewPager viewPager = findViewById(R.id.pager);
    final PagerAdapter adapter = new com.example.android.ontrack.adapters.PagerAdapter(getSupportFragmentManager(),tabLayout.getTabCount());
    viewPager.setAdapter(adapter);
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    tabLayout.addOnTabSelectedListener(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) {

        }
    });
}



Here is my XML code:

 <android.support.v4.widget.NestedScrollView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_marginBottom="@dimen/margin"
                android:fillViewport="true">

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent">

                <android.support.design.widget.TabLayout
                    android:id="@+id/tab_layout"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginBottom="@dimen/margin"
                    android:paddingLeft="@dimen/padding"
                    android:paddingRight="@dimen/padding"
                    android:background="@color/blue"
                    android:fillViewport="true"
                    app:tabMode="scrollable"
                    app:tabIndicatorColor="@android:color/white"
                    app:tabSelectedTextColor="@android:color/white"
                    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />

                    <android.support.v4.view.ViewPager
                        android:id="@+id/pager"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent" />

            </RelativeLayout>

            </android.support.v4.widget.NestedScrollView>

这是我的PagerAdapter:

public class PagerAdapter extends  FragmentStatePagerAdapter {
    int mNumOfTabs;

    public PagerAdapter(FragmentManager fm, int mNumOfTabs) {
        super(fm);
        this.mNumOfTabs = mNumOfTabs;
    }

    @Override
    public Fragment getItem(int position) {

        switch (position) {
            case 0:
                CommentsFragment tab1 =  new CommentsFragment();
                return tab1;
            case 1:
                AttachmentsFragment tab2 = new AttachmentsFragment();
                return tab2;
            case 2:
                AuditTrailFragment tab3 = new AuditTrailFragment();
                return tab3;
            case 3:
                ApproversFragment tab4 = new ApproversFragment();
                return tab4;
            default:
                return null;
        }
    }

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

共有2个答案

齐望
2023-03-14

这是我的样品。它应该会起作用。https://github.com/ElifBon/FragmentAdapterProject

XML:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <android.support.design.widget.TabLayout
        android:id="@+id/tabLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <ViewPager
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"></ViewPager>
</LinearLayout>

您的活动:

 TabLayout tabLayout = (TabLayout)findViewById(R.id.tabLayout);
 ViewPager viewPager = (ViewPager)findViewById(R.id.viewPager);
 viewPager.setAdapter(new CustomFragmentPagerAdapter(getSupportFragmentManager()));
 viewPager.setCurrentItem(2);
 tabLayout.setupWithViewPager(viewPager);

 tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
     @Override
     public void onTabSelected(TabLayout.Tab tab) {
         // TODO : Something
     }

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

     }

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

     }
 });

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {
        // TODO : Something
    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }
});

适配器:

private class CustomFragmentPagerAdapter extends FragmentPagerAdapter{

Fragment1 fragment1;
Fragment2 fragment2;
Fragment3 fragment3;

    public  CustomFragmentPagerAdapter(android.support.v4.app.FragmentManager fm){
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        if(position == 0){
            if(fragment1 == null){
                fragment1 = Fragment1.getInstance();
            }
            return  fragment1;
        }else if(position == 1){
            if(fragment2 == null){
                fragment2 = Fragment2.getInstance();
            }
            return fragment2;
        }else if(position == 2){
            if(fragment3 == null){
                fragment3 = Fragment3.getInstance();
            }
            return fragment3;
        }else{
            return null;
        }
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return "Title - " + String.valueOf(position);
    }

    @Override
    public int getCount() {
        return 3;
    }
}
蒋正平
2023-03-14

来自文档

只需调用tabLayout即可。设置viewPager(viewPager)

并且似乎XML中存在问题,您TabLayout应该在ViewPager

因为

viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));

意味着你想更改标签,而每个标签都承载着一个片段。

更新:您已删除添加选项卡的代码,如github链接所示,发布在评论中。

// add these lines again
TabLayout tabLayout = findViewById(R.id.tab_layout);
tabLayout.addTab(tabLayout.newTab().setText("COMMENTS"));
tabLayout.addTab(tabLayout.newTab().setText("ATTACHMENTS"));
tabLayout.addTab(tabLayout.newTab().setText("AUDIT TRAIL"));
tabLayout.addTab(tabLayout.newTab().setText("APPROVERS"));
ViewPager viewPager = (ViewPager)findViewById(R.id.viewPager);
viewPager.setAdapter(new CustomFragmentPagerAdapter(getSupportFragmentManager()));
viewPager.setCurrentItem(2);
tabLayout.setupWithViewPager(viewPager);
//... code of listener etc
 类似资料:
  • 我有一个片段与片段寻呼机适配器实现表布局每个选项卡有一个回收器视图与一些项目(相同的回收器视图适配器为所有recylerview)通过实现OnItemClick侦听器点击每个项目调用一个活动,实现了一个视图寻呼机与片段StatePagerAdapter,以显示回收器视图项目基于滑动的表布局视图寻呼机显示上一个或下一个选项卡项目每个项目的数据存储在一个数组列表中。 一个片段和两个片段和…是相似的:

  • 所以问题是,selenium在page1中搜索特定的项目。然后它点击它,根据网站的设计,它在一个新的标签中打开page2。如何让selenium跟随单击并在新选项卡上工作? 我虽然使用美丽的汤只是复制从page1的网址,但网站没有显示网址。相反,它显示了获取URL的函数。真的很奇怪,也很混乱。想法?

  • 在jQuery中创建选项卡。单击其他选项卡时,所有选项卡都将消失。我想不出解决办法 以下是无法正常工作的页面:http://www.sleepfullnights.com/products/sfn-537 这是另一个用它工作的人的JSFIDLE:http://jsfiddle.net/gravitybox/7pHg4/我已经复制并粘贴了其中的每个元素到页面中,问题仍然存在。 一个人指出,当点击标签

  • 我在Codepen网站上发现了这个非常酷的响应菜单:https://Codepen.io/sergiodaroca/pen/bgkpqy 但当我将其添加到我的站点时,当查看完整的桌面菜单时,标题“Rhino”会集中在菜单选项后面。它适用于汉堡包菜单。在这里,您可以看到它在我的站点上不起作用:https://bozzaradio.co.uk/default.aspx 我有办法调整代码来解决这个问题吗

  • 我正在尝试在我的网站上做一个标签功能,我希望有那个标签响应。所以我做了这样的代码: null null 现在我有两样东西, > 首先,我希望在单击标题(伦敦、巴黎、东京)时关闭选项卡,然后在单击该标题时从该标题中删除活动类。 其次,我希望有两个标签在行的响应,第三个标签在第二行,然后单击打开被点击的标签,然后向下推第三个标签。 任何提示都会有帮助,提前谢谢

  • 我想使用带有选项卡的ViewPager。然而,我需要在寻呼机上方放置一个文本视图(以及选项卡),如下所示: 看起来对于选项卡小部件,我们可以使用PagerTitleStrip或PagerTabStrip内联一个选项卡小部件: 但是,PagerTitleStrip和PagerTabStrip小部件的风格与只使用ActionBar选项卡时不同。我希望选项卡看起来像它们,具有均匀间隔的选项卡大小。 是否