【问题标题】:How to refresh the Pager tab fragment in android?如何刷新android中的寻呼机标签片段?
【发布时间】:2017-09-13 06:38:55
【问题描述】:

当我从选项卡滑动到另一个 fragment 时,我必须刷新 fragment

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRetainInstance(true);
}


@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);

    mBinding = DataBindingUtil.inflate(inflater, R.layout.manage_work_shop_act, container, false);


    mBinding.layout.title.setText(getString(R.string.d_manage_my_staff));

    mBinding.tabs.setupWithViewPager(mBinding.viewpager);
    setupViewPager(mBinding.viewpager);

    mBinding.layout.nav.setVisibility(View.GONE);
    mBinding.layout.navMenu.setVisibility(View.VISIBLE);

    mBinding.layout.navMenu.setOnClickListener(view -> openDrawer());

    return mBinding.getRoot();
}


private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager());

    int limit = (adapter.getCount() > 1 ? adapter.getCount() - 1 : 1);

    adapter.addFragment(new MechanicListFragment(), getString(R.string.d_manage_my_staff));
    adapter.addFragment(new MechanicNewFragment(), getString(R.string.new_frag));
    viewPager.setAdapter(adapter);
    viewPager.setOffscreenPageLimit(limit);

    adapter.notifyDataSetChanged();
}

我的适配器是这样的

public 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);
}

@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);
}
}

我尝试了所有方法来刷新我的fragment。 如果我滑动选项卡或单击另一个选项卡,那么我需要再次刷新可见选项卡。 在我当前的fragment 中没有刷新。

请帮我解决这个问题。

【问题讨论】:

  • 也发布您的适配器代码。如果您正在使用,请尝试使用片段状态寻呼机适配器而不是片段适配器。
  • 查看这个链接我的朋友stackoverflow.com/questions/32435250/…
  • 我已经更新了我的适配器类请检查
  • 查看分页器将同时加载左右项目。因此默认情况下将加载总共 3 个视图寻呼机项目。因此,如果您在该范围内滑动,则不会重新创建寻呼机项目。如果您想手动刷新,请在视图寻呼机 ItemSelected 方法上重新加载您的片段。
  • 你能给我举个例子吗?

标签: android android-fragments android-viewpager android-tablayout


【解决方案1】:

当您必须刷新适配器中的选项卡时,尝试使用片段状态分页器适配器而不是片段适配器。

FragmentPagerAdapter 存储从适配器获取的先前数据,而 FragmentStatePagerAdapter 每次执行时都从适配器获取新值。

【讨论】:

  • 我已经改变了像这个公共类 ViewPagerAdapter extends FragmentStatePagerAdapter { 它不工作
【解决方案2】:

片段中有onHiddenChanged方法。

在隐藏状态时调用(由 isHidden() 返回 片段已更改。片段开始时没有隐藏;这将成为;这将是 每当片段改变状态时调用。

覆盖每个选项卡片段中的onHiddenChanged 方法,如果没有隐藏则进行刷新。例如:

class YourFragment extends Fragment {

    @Override public void onHiddenChanged(boolean hidden) {
        super.onHiddenChanged(hidden);
        if (!hidden) {
            //you can refresh here now
        }
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2012-11-27
    • 1970-01-01
    相关资源
    最近更新 更多