无法在View Pager中更新中间片段。

时间:2017-05-11 08:47:37

标签: java android android-fragments android-viewpager fragment

我一直在使用3个标签处理TAB布局。

我的问题是 我无法更新,刷新页面之间的第二个选项卡。

根据我的调试 我从第一个标签到第二个标签,第三个是在getItem(int位置)调用,类似的第一个标签被称为从第三个标签到第二个标签。

viewpager的默认 getOffscreenPageLimit 1 。我甚至无法将其设置为零。

在getItem,一开始位置是1但是只要我刷页面, 它只调用位置0和2。 永远不会被称为1。

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

这是我的ViewPagerSetUp

private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new 
ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(new InvitedFragment(), "Invited");
    adapter.addFragment(new InterestedFragment(), "Interested");
    adapter.addFragment(new AttendingFragment(), "Attending");
    viewPager.setAdapter(adapter);
}

这是我的ViewPager

 class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }

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

    public void refreshFragment(int position) {
        mFragmentList.get(position).onResume();
    }

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

    public void addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }
}

addOnPageChangeListener是一个选项,但我也无法使用pageChangelistener刷新它。

如何治愈offscreenpagelimit? 如何刷新每个页面上的每个选项卡?

谢谢。

4 个答案:

答案 0 :(得分:3)

试试这个,

覆盖fragment中的以下方法。片段可见时调用

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) {
        //do your Stuffs
    }
}

答案 1 :(得分:1)

在您的活动中添加此内容

  viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {
            viewPager.getAdapter().notifyDataSetChanged();
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });
你的适配器中的

添加了这个,

 @Override
    public int getItemPosition(Object object) {
       return POSITION_NONE;
    }

答案 2 :(得分:0)

如果你没有添加,你必须将View Pager添加到tabLayout中,然后尝试以下代码:

 tabLayout.setupWithViewPager(viewPager); 

你也在refreshFragment方法中调用Parent Fragment(super)onResume方法,你必须调用SubFragment onResume方法:

    mInvitedFragment.onResume();
    mInterestedFragment.onResume();
    mAttendingFragment.onResume();

答案 3 :(得分:0)

您可以使用以下方法刷新第二个片段。将此方法放在片段中。

@Override
    public void setUserVisibleHint(boolean visible) {
        super.setUserVisibleHint(visible);
        if (visible) {
            //   load data here
        }else {
            // fragment is no longer visible
        }
    }