无法更新 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 的默认 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 问题? 如何在每次页面滑动时刷新每个标签?
谢谢。
【问题讨论】:
【参考方案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 && 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 中的中间片段。的主要内容,如果未能解决你的问题,请参考以下文章
无法从 ViewPager 中的另一个片段刷新/更新片段中的列表视图
在tablayout viewpager中运行调整选项卡片段