Android ViewPager只刷新一个片段

时间:2014-03-24 21:47:47

标签: android android-viewpager

我有一个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();时,它们都会变得有点滞后。

有没有更好的解决方案?

谢谢大家

2 个答案:

答案 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更改或数据库交互,那么您可以尝试这个解决方案。