我一直在使用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? 如何刷新每个页面上的每个选项卡?
谢谢。
答案 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
}
}