我已经使用了滑动片段 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**
}
答案 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())
}