Reputation: 18194
I have implemented swipe fragments using https://developer.android.com/training/animation/screen-slide.html or 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>
Here is 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;
}
}
Now I am trying to access the currently viewed fragment like this
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**
}
Upvotes: 1
Views: 51
Reputation: 3480
First, you need to change your ScreenSlidePagerAdapter
to return the same instance everytime instead of new Page0Fragment
like:
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();
}
Now for getting visible fragment, do like:
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();
}
Upvotes: 2
Reputation: 2832
You can get the current fragment by calling getItem() with the current position on your adapter like this
public void myonclickmethod() {
Fragment fragment = adapter.getItem(viewpager.getCurrentItem())
}
Upvotes: 1