如下所述。最好的方法是向viewpager添加一个监听器,以了解何时选择每个片段。
这样,活动可以通过接口触发片段刷新侦听器。
答案 0 :(得分:1)
检查此post这两个答案,并评论它是您需要的。还要考虑一个更清晰的解决方案,当你翻转它们时要调用的代码将它们放在public method
类的Fragment
中,然后放在ViewPager中的onPageSelected中正在访问的特定片段中无论是通过位置(或者你想要像ViewPager.getItem(pos)
这样做)都将返回一个片段,你可以检查该Fragment是否是你喜欢的Fragment类的实例并将其转换为它并调用你的代码
//suppose i have my fragment via myViewp.getItem(2)
if(fragmentObject instanceof MyFragmentClass){
//do work
}
//put else and check for others
答案 1 :(得分:1)
没有立即回调片段;从框架来看,Fragment的所有三个生命周期都是相同的:它们被附加到活动,创建,创建视图和恢复。这些回调都与它们在ViewPager中的显示方式无关,并且有充分的理由。
您对ViewPager中的回调感兴趣。为此,您可以注册ViewPager.OnPageChangeListener:
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
// If you would like to have more granular control than onPageSelected(),
// you may inspect when the user "begins to scroll" to the next page
}
@Override
public void onPageSelected(int position) {
Fragment fragment = mAdapter.getItem(position);
if (fragment instanceof OnMyFragmentSelectedListener) {
((OnMyFragmentSelectedListener) fragment).onMyFragmentSelected();
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
在上面的代码片段中,我介绍了一个名为OnMyFragmentSelectedListener的接口。如果您的片段实现了它,并实现了onMyFragmentSelected()
方法,ViewPager会在您的片段被选中时通知您的片段。
您可以使用OnPageChangeListener做一些有趣的事情,例如JazzyViewPager中的片段之间的动画。在您的情况下,您可以在调用侦听器时开始加载其他数据。
答案 2 :(得分:1)
您需要通过setArguments传递所需的数据。
ChildFragment fragment = new ChildFragment();
Bundle bundle = new Bundle();
bundle.putInt("PARAMETER", param);
fragment .setArguments(bundle);