FragmentStatePagerAdapter onPageSelected事件 [英] FragmentStatePagerAdapter onPageSelected event
问题描述
我有6个片段内FragmentStatePagerAdapter。
I have a FragmentStatePagerAdapter with 6 fragments inside.
每个片段连接的服务器并加载数据。
Each Fragment connect's to the server and loads data.
现在,服务器连接被在Fragment.onStart(),这意味着,在任何时刻,我有3 http请求正在进行(所选片段,和一个每边一个)。
Right now, the server connection is being done in Fragment.onStart(), that means that at any moment, I have 3 http requests going (the selected Fragment, and one to each side).
我要的是有当时只有一个连接,所以我想用
What I want is to have only one connection at the time, so I figure to use
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()
返回片段的新实例,没有添加到管理器(因此,尚未视图中创建,等等)。
The thing is, getItem()
returns a new instance of the fragment, not yet added to the manager (and thus, not yet view created, etc).
另外,我已经试过 setUserVisibleHint(布尔isVisibleToUser)
,但不是随叫随到可见,只有在isVisibleToUser = FALSE
Also, I've tried setUserVisibleHint(boolean isVisibleToUser)
but is not being call on visible, only on isVisibleToUser = false
那么,如何实现onPageSelected()事件的片段?
So, how to achieve a "onPageSelected()" event for the Fragment?
在此先感谢
推荐答案
你将覆盖最好的解决办法 setUserVisibleHint()
。请确保您延长 FragmentPagerAdapter
。从它的<一个href="https://github.com/android/platform_frameworks_support/blob/master/v4/java/android/support/v4/app/FragmentPagerAdapter.java"相对=nofollow>来源$ C $ C 你可以看到它调用 setUserVisibleHint(真)
可见的碎片了。我用它所有的时间和它工作得很好。
The best solution for you would be to override setUserVisibleHint()
. Make sure you extend FragmentPagerAdapter
. From its source code you can see it calls setUserVisibleHint(true)
for visible fragments too. I use it all the time and it works well.
// 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);
}
}
这篇关于FragmentStatePagerAdapter onPageSelected事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!