【问题标题】:How to access particular page of ViewPager by Button click, not by sliding如何通过按钮单击而不是滑动访问 ViewPager 的特定页面
【发布时间】:2016-09-16 08:01:09
【问题描述】:

我有三个Fragments 附加到ViewPager。如果我是 Fragment1,并且我在 Fragment1 上有一个按钮,我想单击那个“Fragment”按钮,访问 Fragment3,但同时如果我滑动页面,我不想访问 Fragment3。滑动时我只想访问 Fragment2。我该怎么做。

TabPagerAdapter.java:-

公共类 TabPagerAdapter 扩展 FragmentStatePagerAdapter { 公共 TabPagerAdapter(FragmentManager 片段管理器) { 超级(片段管理器); }

    @Override
    public Fragment getItem(int position) 
    {
        switch (position) 
        {
        case 0:

            return new Fragment1();
        case 1:

            return new Fragment2();
        case 2:

            return new Fragment3();

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

【问题讨论】:

标签: android


【解决方案1】:

我已经实现了一些非常相似的东西:以前我在 ViewPager 中有四个片段,但后来我决定通过减少滑动和切换回可以到达的片段数量来更紧密地集成其中两个片段使用按钮在两个片段之间来回切换。不过,实施花了我一段时间。我没有设法正确地弄乱我的fragmentList 的索引。最后,诀窍是从ViewPager 中取出这两个片段,然后添加一个HolderFragment。在这个片段中,我实现了片段事务以隐藏一个片段并显示另一个片段。

这是我的 HolderFragment 中的代码:

public class HolderFragment extends Fragment {
    private Context context;     
    private Fragment currentFragment;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        this.context = context;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);
        View view = inflater.inflate(R.layout.fragment_holder, container, false);

        OneFragment oneFragment =
            (OneFragment) Fragment.instantiate(context, OneFragment.class.getName());
        OtherFragment otherFragment =
            (OtherFragment) Fragment.instantiate(context, OtherFragment.class.getName());

        // oneFragment selected on view creation
        FragmentManager fm = this.getChildFragmentManager();
        fm.beginTransaction().add(R.id.holder_fragment_holder, oneFragment).commit();
        fm.beginTransaction().add(R.id.holder_fragment_holder, otherFragment).hide(mediaFragment)
            .commit();
        currentFragment = oneFragment;

        return view;
    }

    public void switchFragments(Fragment fragment) {
        if (!fragment.equals(currentFragment)) {
            this.getChildFragmentManager().beginTransaction().hide(currentFragment).commit();
            currentFragment = fragment;
            this.getChildFragmentManager().beginTransaction().show(currentFragment).commit();
        }
    }
}

然后,每当按下切换按钮时,只需从包含 ViewPager(以及对 HolderFragment 的引用)的 Activity 调用 holderFragment.switchFragments(oneFragment)holderFragment.switchFragments(otherFragment)

【讨论】:

    【解决方案2】:

    试试这个

    mViewPager.setCurrentItem(your_position, true);
    

    【讨论】:

    • 使用 mViewPager.setCurrentItem(your_position, true);我可以在按钮单击时访问片段3,但在滑动时我仍然可以访问片段3..我不想在滑动时访问片段3..
    • 所以你想禁用滑动?
    • 我想滑动到 fragment2 而不是 fragment3
    • 所以只需创建带有 2 个片段(1,2)的 viewpager,然后单击将片段 2 替换为片段 3
    • 好的,请稍等
    猜你喜欢
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多