如何 select 子片段中的下一个选项卡

How to select next tab from child fragment

当从子片段中单击按钮时,我需要切换下一个选项卡。

这就是我在父级中设置标签的方式,

TabAdapter adapter;

private void setUpTabs(ViewPager viewPager) {

    adapter = new TabAdapter(getSupportFragmentManager());
    adapter.addFragment(new FirstTabFragment(), "First Tab");
    adapter.addFragment(new SecondTabFragment(), "Second Tab");
    viewPager.setAdapter(adapter);

}

而我的 TabAdapter class 是,

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

    public TabAdapter(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 mFragmentTitleList.get(position);
    }
}

我创建了一个在 Parent 中切换选项卡的方法

TabLayout myTabs= (TabLayout) findViewById(R.id.my_tabs);

Button chkBtn = (Button) findViewById(R.id.check_button);

chkBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        viewPager.setCurrentItem(1);
    }
});

在父 class 中切换标签页工作正常。但是我怎么能在里面做同样的事情FirstTabFragment,请帮助我。

你应该使用 setCurrentItem(int item)

Set the currently selected page. `

示例代码

chkBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        viewPager.setCurrentItem(2);
    }
});

你应该打电话给

viewPager.setCurrentItem(fragmentIdex);

为了让您的 UI 更具互动性和美观性,我将分享我实现的内容。

只是为了从片段的 java 文件中访问您的 viewPager,请在您的父 activity.

中如下声明您的 viewPager
public static ViewPager viewPager;

然后在片段中某个按钮的onClick方法或onClickListener中,就用这个即可。

ParentActivity.viewPager.arrowScroll(View.FOCUS_RIGHT);

这将使您的 viewpager 平滑滚动到第二个片段,是的,如果您想限制用户直接滚动,您可以禁用 viewPager 的滚动,阅读 here

如果用户想返回 FirstFragment,您也可以将焦点向左移动

ParentActivity.viewPager.arrowScroll(View.FOCUS_LEFT);

是的,我在发布答案之前首先测试它,我真傻。