2013-01-07 59 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;   
    } 
}} 
这里