2014-03-24 135 views
1

我有一個ViewPager與一組fragments,這是所有不同的,需要時間加載,我需要刷新其中一個(第二個),當我移動它。我還設置setOffscreenPageLimit支離破碎我已Android ViewPager刷新只有一個片段

我用這個方法嘗試次數:

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();被調用,這一切都變得有點laggy。

有沒有更好的解決辦法?

謝謝大家

+0

這裏有同樣的問題。你能找到一個好的解決方案嗎? – treesAreEverywhere

+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(); 
     } 
    } 
    ... 
}); 

的一個例子希望這將幫助一些人,而且,如果有一個更好的解決方案,請提供我們與它

0

嗯,如果你真的不必刷新整個片段,你可以嘗試重寫片段的onResume方法,並做出相應的更改。如果您試圖實現完全平衡的變化,這真的不是一個好方法。但是,如果你正在尋找小的UI更改或數據庫互動,那麼你可以嘗試這個解決方案。