2013-01-07 61 views
4

每次我的片段成爲可見的我要執行的代碼的和平,將調用Web服務,獲取一些數據,並在屏幕上顯示它的用戶。我得到了Web服務部分等工作,但在什麼情況下我必須添加我的代碼不知道....我想:片段變得可見

  1. 在onStart
  2. 的onResume
  3. onAttach

但我的代碼每次都不會啓動。

正在使用與SherlockFragment Android的V4補償LIB作爲我的基類。

+0

同樣的問題。文檔說onCreateView()之後onResume被調用一次。在將片段添加到FragmentManager()時,似乎沒有片段上的事件。我不知道該怎麼做。我想,我們必須使用FragmentManager.OnBackStackChangedListener()但從Frament點,沒有問題:( – mba

回答

-17

onResume()被稱爲每次你的片段變得對用戶可見的時間。還有別的東西你的代碼錯誤,如果它不

onCreateView()被稱爲第一時間片段需要借鑑它的UI

更新:該接受的答案是工作5年前 - 它不」牛逼了

+0

你應該看看Fragement文檔,這與活動有很大的區別http: //developer.android.com/guide/components/fragments.html。 – mba

+1

答案是錯的。據我所知:我有一個FragmentActivity,並在該活動中使用ViewPager。 ViewPager包含4個片段。每當我的應用程序啓動(只有第一個片段可見)時,第一個和第二個Fragements的兩個方法:onCreateView()和onResume()被調用! – hungson175

+0

這不完全是我說的嗎? onResume總是被稱爲 - 也是當應用程序開始(第一次)以及onCreateView – Lieuwe

2

onCreateView()

調用當您更改片段以及新片段變得可見每次..

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) 
+0

看看,讓我知道,發生什麼事了許多不同的方式? – user370305

+0

嗯,我堅持了這個問題,並試圖但這一個是解決當片段變得可見再次 –

+0

不工作 - !它只有當你的交易有兩個片段與片段的片段新創建的名爲 – keybee

12

您可以使用

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 
    if (isVisibleToUser) { } 
    else { } 
} 

看一看this

+0

這是API 15及以上:(當boo – RobP

+1

不起作用時,你推後面的按鈕與嵌套片段 – splinter123

3

這可能很老,但我發現setUserVisibleHint()不適用於我的許多用例。相反,我不得不使用ViewTreeObserver進行破解。

基本上,你的片段被初始化後,你在其中一個視圖,並做到以下幾點:

myViewInFragment.getViewTreeObserver().addOnGlobalLayoutListener(
    new ViewTreeObserver.OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      myMethodWhenFragmentFirstBecomesVisible(); 
      myViewInFragment.getViewTreeObserver().removeOnGlobalLayoutListener(this); 
     } 
    }); 
} 
0

以下方法被用於確定何時片段成爲用戶的正面可見。

private boolean loding= false; // your boolean flage 

@Override 
public void setUserVisibleHint(boolean isFragmentVisible) { 
super.setUserVisibleHint(true); 
if (this.isVisible()) { 
    // we check that the fragment is becoming visible first time or not 
    if (isFragmentVisible && !loding) { 
     //Task to doing while displaying fragment in front of user 
     loding = true;   
    } 
}} 
這裏