我正在尝试使用findFragmentById()
获取Fragment引用,但它始终返回空对象。我已经使用FragmentPagerAdapter
并附加了OnPageChangeListener
,以便每当我滚动到特定的片段(例如FragmentB
)时,都应该触发FragmentB
的方法。
我有以下代码:
mPager.addOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
if (position == 1) {
FragmentB fb = (FragmentB) getSupportFragmentManager().findFragmentById(R.id.fragment_b);
fb.refreshList();
//fb is always null
Toast.makeText(MainActivity.this,"Scrolled", Toast.LENGTH_SHORT).show();
//Toast is working fine
}
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2){}
@Override
public void onPageScrollStateChanged(int arg0){}
});
最佳答案
只需这样做:
mPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
PagerAdapter pagerAdapter = (PagerAdapter) mPager.getAdapter();
if (position == 1) {
FragmentB fragmentB = (FragmentB)pagerAdapter.getItem(position);
fragmentB.refreshList();
}
}
@Override
public void onPageSelected(int position) {}
@Override
public void onPageScrollStateChanged(int state) {}
});
findFragmentById
问题不能以这种方式使用:查找从XML扩展时或由事务添加时由给定ID标识为容器ID的片段。首先,搜索当前添加到经理活动中的片段;如果找不到此类片段,则搜索当前与该ID关联的堆栈上的所有片段。
在使用
ViewPager
时,应调用它来获取片段容器中的片段(例如,如果您使用的是导航抽屉,并且您想知道哪个片段在视口中),多个片段。希望对您有所帮助。
关于android - SupportFragmentManager的findFragmentById始终返回null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34752990/