如何在tablayout中执行onCLick侦听器中的片段?

时间:2018-09-28 11:08:38

标签: android android-fragments android-tablayout

您好,我正在使用View Pager进行可滑动的布局。在此片段中滑动可以正常工作,但不会执行onclick事件。
在TabLayout上执行滑动操作,单击不起作用?如何在TabLayout上添加点击侦听器?零碎地 我该怎么做? 这是我的代码:

TabLayout tabLayout = view.findViewById(R.id.tablayout);
    tabLayout.addTab(tabLayout.newTab().setText("Tab 1"));
    tabLayout.addTab(tabLayout.newTab().setText("Tab 2"));
    tabLayout.addTab(tabLayout.newTab().setText("Tab 3"));
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);

    final ViewPager viewPager = view.findViewById(R.id.pager);
    final PagerAdapter adapter = new PagerAdapter(((ProductActivity)context).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());
            int position = tab.getPosition();
            switch (position){
                case 0:
                    Log.e("Position",String.valueOf(0));
                    break;
                case 1:
                    Log.e("Position",String.valueOf(1));
                    break;
                case 2:
                    Log.e("Position",String.valueOf(2));
                    break;
                    default:
                        break;
            }
        }

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

        }

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

        }
    });

}

和pagerAdapter是:

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

@Override
public Fragment getItem(int position) {
    switch(position)
    {

        case 0:
            Tab1 tab1 = new Tab1();
            return tab1;
        case 1:
            Tab2 tab2 = new Tab2();
            return  tab2;
        case 2:
            Tab3 tab3 = new Tab3();
            return  tab3;
        default:
            return null;
    }
}

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

2 个答案:

答案 0 :(得分:0)

在这种情况下,您尚未使用TabLayout设置viewpager,这就是它不执行onclick的原因。 用这样的tablayout设置您的viewpager

TabLayout  tabLayout = view.findViewById(R.id.tablayout);
tabLayout.setupWithViewPager(viewPager);

在此之后它将起作用

答案 1 :(得分:0)

onCreate

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

tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);

设置视图分页器

private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(new Fragment1(), "Tab1");
    adapter.addFragment(new Fragment2(), "Tab2");
    viewPager.setAdapter(adapter);
}

ViewPagerAdapter

    *class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);
        }

        @Override
        public int getCount() {
            return mFragmentList.size();
        }

        public void addFragment(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

        @Override
        public CharSequence getPageTitle(int position) {
//            return null;
            return mFragmentTitleList.get(position);
        }
    }*

这是将标签与片段一起使用的方式。并创建Fragment1()和Fragment2()类

相关问题