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

Posted

技术标签:

【中文标题】无法更新 View Pager 中的中间片段。【英文标题】:Not able to update middle fragment in View Pager. 【发布时间】:2017-10-10 04:14:15 【问题描述】:

我一直在研究带有 3 个选项卡的 TAB 布局。

我的问题是 我无法更新,刷新页面之间滑动的第二个标签。

根据我的调试 我从第一个选项卡滑动到第二个,第三个在 getItem(int position) 调用,类似的片段一个被称为从第三个选项卡滑动到第二个。

viewpager 的默认 getOffscreenPageLimit1。我什至无法将其设置为零计数。

在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 问题? 如何在每次页面滑动时刷新每个标签?

谢谢。

【问题讨论】:

【参考方案1】:

试试这个,

在fragment中重写下面的方法。它在fragment可见时调用

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

【讨论】:

因为 setUserVisibleHint 一开始就执行了,所以我也必须添加 isResumed。感谢 Pradeep 的建议。 if (isVisibleToUser && isResumed()) //做你的事情 if (isVisibleToUser &amp;&amp; isResumed()) 你救了我的命,你能编辑你的答案吗@PradeepGupta【参考方案2】:

将此添加到您的活动中

  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;
    

【讨论】:

【参考方案3】:

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

 tabLayout.setupWithViewPager(viewPager); 

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

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

【讨论】:

【参考方案4】:

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

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

【讨论】:

以上是关于无法更新 View Pager 中的中间片段。的主要内容,如果未能解决你的问题,请参考以下文章

隐藏在标签栏后面的 View Pager 的片段

无法从 ViewPager 中的另一个片段刷新/更新片段中的列表视图

无法更新FragmentPagerAdapter中的片段

在tablayout viewpager中运行调整选项卡片段

无法更新 viewDidLoad 中的 view.layer.frame?

无法使用 ArrayObjectAdaptor 的 clear() 和 addAll() 刷新/更新浏览片段