如何通过按钮单击而不是通过滑动来访问ViewPager的特定页面

时间:2016-09-16 08:01:09

标签: android

我有三个Fragments附加到ViewPager。如果我是Fragment1,并且我在Fragment1上有一个按钮,我想按下那个片段' Fragment',访问片段3,但如果我滑动页面同时,我不想要访问Fragment3。滑动时,我想只访问Fragment2。我怎么能这样做。

TabPagerAdapter.java: -

public class TabPagerAdapter扩展了FragmentStatePagerAdapter     {         public TabPagerAdapter(FragmentManager fragmentManager)         {             超级(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; 
    }

2 个答案:

答案 0 :(得分:0)

我已经实现了一些非常相似的东西:以前我在我的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();
        }
    }
}

然后,只要按下切换按钮,只需从包含holderFragment.switchFragments(oneFragment)的活动(以及对HolderFragment的引用)中调用holderFragment.switchFragments(otherFragment)ViewPager

答案 1 :(得分:-1)

试试这个

mViewPager.setCurrentItem(your_position, true);