gpt4 book ai didi

android - FragmentStatePagerAdapter onPageSelected 事件

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:43:30 26 4
gpt4 key购买 nike

我有一个 FragmentStatePagerAdapter,里面有 6 个 fragment 。

每个 fragment 都连接到服务器并加载数据。

现在,服务器连接正在 Fragment.onStart() 中完成,这意味着在任何时候,我都有 3 个 HTTP 请求(选定的 fragment ,每边一个)。

我想要的是一次只有一个连接,所以我想用

 viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener()
{
@Override
public void onPageSelected(final int position)
{
CustomFragment fragment = (CustomFragment) myFragmentStatePagerAdapter.getItem(position);

fragment.onSelected();//do stuff in here
}
});

事情是,getItem() 返回 fragment 的一个新实例,尚未添加到管理器(因此,尚未创建 View 等)。

此外,我已经尝试过 setUserVisibleHint(boolean isVisibleToUser) 但没有在可见时调用,仅在 isVisibleToUser = false 时调用

那么,如何实现Fragment的“onPageSelected()”事件呢?

提前致谢

最佳答案

最适合您的解决方案是覆盖 setUserVisibleHint()。确保扩展 FragmentPagerAdapter。来自其 source code您可以看到它也为可见 fragment 调用 setUserVisibleHint(true)。我一直在使用它,效果很好。

// adapter
public static class PlayerAdapter extends FragmentStatePagerAdapter {
public PlayerAdapter(FragmentManager fm) {
super(fm);
}

@Override
public int getCount() {
return 6;
}

@Override
public Fragment getItem(int position) {
return new SimpleFragment();
}
}

// fragment
public class SimpleFragment extends Fragment {

private static final String TAG = BookControlsFragment.class.getSimpleName();

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_simple, container, false);
}

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
Log.d(TAG, "setUserVisibleHint: " + isVisibleToUser);
}
}

关于android - FragmentStatePagerAdapter onPageSelected 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23857299/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com