使用viewpager访问当前查看的片段的实例

时间:2017-09-14 08:47:00

标签: android android-fragments android-viewpager

我已经使用了滑动片段 https://developer.android.com/training/animation/screen-slide.html 要么 https://developer.android.com/training/implementing-navigation/lateral.html

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/some_background_fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

    <android.support.v4.view.ViewPager
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

</RelativeLayout>

这是MyActivity.java:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_overlay);

        // Instantiate a ViewPager and a PagerAdapter.
        mPager = findViewById(R.id.pager);
        mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
        mPager.setAdapter(mPagerAdapter);
        mPager.setCurrentItem(1);
    }
    private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter{
        public ScreenSlidePagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            if (position == 0)
                return new Page0Fragment();
            else
                return new Page1Fragment();
        }

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

现在我正在尝试访问当前查看过的片段

 public void myonclickmethod(View view) {
    FragmentManager fm = getSupportFragmentManager();       
    fragment = fm.findFragmentById(R.id.pager);//<=**This is coming as instance of Page0Fragment inspite of me intializing the activity with Page1Fragment and also currently standing on Page1Fragment without any swiping**
 }

2 个答案:

答案 0 :(得分:2)

首先,您需要更改ScreenSlidePagerAdapter以便每次都返回相同的实例而不是新的Page0Fragment,如:

    private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter{
            List<Fragment> fragments = new ArrayList<>();
            public ScreenSlidePagerAdapter(FragmentManager fm) {
                super(fm);
                fragments.add(new Page0Fragment());
                fragments.add(new Page1Fragment());
            }

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

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

现在获取可见片段,请执行以下操作:

public void myonclickmethod(View view) {
    int currentPosition = mPager.getCurrentItem();
    if(currentPosition == 0 {
        Page0Fragment page0Fragment = (Page0Fragment)mPagerAdapter.getItem(currentPosition);
        page0Fragment.doSomething();
    } else {
        Page1Fragment page1Fragment =(Page1Fragment)mPagerAdapter.getItem(currentPosition);
       pag1Fragment.doSomething();

 }

答案 1 :(得分:1)

您可以使用适配器上的当前位置调用getItem()来获取当前片段,如此

    public void myonclickmethod() {
       Fragment fragment = adapter.getItem(viewpager.getCurrentItem())
}