我有一个ViewPager
,其中包含一组fragments
,它们都不同,并且需要时间来加载,我需要刷新其中一个(比如第二个)它。我还将setOffscreenPageLimit
设置为我拥有的片段数
我尝试使用这种方法:
mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
if(position == 1) {
pagerAdapter.notifyDataSetChanged();
}
}
...
});
然后刷新:
@Override
public int getItemPosition(Object object) {
if (object instanceof MyFragment ) {
MyFragment f = (MyFragment ) object;
if (f != null) {
f.refreshStuff();
}
}
return super.getItemPosition(object);
}
但是使用这种方法似乎当我选择第二个并且调用pagerAdapter.notifyDataSetChanged();
时,它们都会变得有点滞后。
有没有更好的解决方案?
谢谢大家
答案 0 :(得分:0)
过了一会儿,我尝试了以下解决方案,并且工作安静得很好
首先我按如下方式定义了一个接口:
public static interface FragmentState{
void fragmentVisible();
}
这个界面将以多个片段实现,并且可以帮助我定义当某个片段可见时我想做什么
public class MyFragment extends Fragment implements FragmentState {
...
@override
public void fragmentVisible() {
//do specific stuff
resetDataOrWhatever();
}
}
然后在我的ViewPager
我定义了pageChangeListener
,如下所示,它是第二个片段的例子,它会做一些事情
mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
if(position == 1) {
MyFragment fragment = mViewPager.getAdapter().getItem(1);
// call the fragmentVisible method here
fragment.fragmentVisible();
}
}
...
});
希望这对一些人有帮助,如果有更好的解决方案,请提供给我们
答案 1 :(得分:0)
好吧,如果你真的不必刷新整个片段,你可以尝试重写片段的onResume方法并进行适当的更改。如果你想要实现完全的替换,这真的不是一个好方法。但是,如果您正在寻找小的UI更改或数据库交互,那么您可以尝试这个解决方案。