简体   繁体   English

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

[英]Not able to update middle fragment in View Pager.

I've been working on a TAB layout with 3 tabs. 我一直在研究带有3个标签的TAB布局。

My problem is I'm unable to update,refresh 2nd tab swiping between the pages. 我的问题是我无法更新,请刷新页面之间的第二个选项卡。

As per my debugging I swipe from tab one to second, the third is being called at getItem(int position), similarly fragment one is being called swiping from third tab to second. 根据我的调试,我从选项卡一滑到第二个,在getItem(int位置)调用了第三个,类似地,一个片段从第三个选项卡滑到了第二个。

The default getOffscreenPageLimit of viewpager is 1 . viewpager的默认getOffscreenPageLimit1 I couldn't even set it to zero count. 我什至无法将其设置为零计数。

At getItem, position is 1 at the very beginning but as soon as I swipe page, it only calls position 0 and 2. 1 is never called. 在getItem处,位置一开始是1,但是一旦我滑动页面,它只会调用位置0和2。从不调用1。

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

This is my ViewPagerSetUp 这是我的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);
}

This is my ViewPager 这是我的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 was one option but I couldn't refresh it using pageChangelistener too. addOnPageChangeListener是一个选项,但我也无法使用pageChangelistener刷新它。

How can I cure offscreenpagelimit ? 我该如何治愈offpagepagelimit? How can I refresh every tab on every page swipe? 如何刷新每滑动页面上的每个标签?

Thank you. 谢谢。

Try this, 尝试这个,

Override the below method in fragment.It call when fragment is visible 覆盖fragment中的以下方法,当可见fragment时调用

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

add this in your activity 将此添加到您的活动中

  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) {

        }
    });

in your adapter add this, 在您的适配器中添加它,

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

you have to add View Pager into tabLayout if you not added then try this code: 如果未添加,则必须将View Pager添加到tabLayout中,然后尝试以下代码:

 tabLayout.setupWithViewPager(viewPager); 

also you are calling Parent Fragment(super) onResume Method in refreshFragment method you have to call SubFragment onResume method : 您也要在refreshFragment方法中调用Parent Fragment(super)onResume方法,则必须调用SubFragment onResume方法:

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

You can use below method for refresh second fragment.Put this method in the fragment. 您可以使用以下方法刷新第二个片段。将此方法放入片段中。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM