我正在尝试使用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/

10-09 00:18