2012-11-06 78 views
24

基本上我需要的onWindowFocusChanged()但在Fragment的功能。 的onWindowFocusChanged()听者实际上不是提供给不幸的片段,所以我不知道该怎么做。检测片段何时被绘制?

任何方式来做到这一点?

回答

54

片段通过你在onCreateView()返回View“绘制”。你可以在那里使用事件处理程序。通常情况下,如果有需要,当View首次来查看要运行的命令,你可以在一个Runnable分配给它,它通过post()方法连接到View

getView().post(new Runnable() { 
    @Override 
    public void run() { 
     // code you want to run when view is visible for the first time 
    } 
    } 
) 
+2

似乎是工作吧!在我选择这个作为正确答案之前,我将通过一些场景来运行它。 – VicVu

+2

我也应该注意到(近两个月后),这个技巧适用于任何视图。不仅仅是通过片段发布的,所以如果你膨胀一个View int他活动例如。这将工作。 – DeeV

+1

是的!我一直在使用这一切为我的小噱头噱头,它的伟大。 – VicVu

-3

OnWindowFocusChanged不提供信息关于绘制视图(或没有看到) 上,可以在你的片段具有焦点每个视图实现OnWindowFocusChanged。 在伪代码:

Fragment implements OnWindowFocusChanged{ 

onCreate(){ 

btn.OnWindowFocusChanged(this); 
editTxt.OnWindowFocusChanged(this); 
.... 

} 

public void OnWindowFocusChanged(boolean hasFocus){ 
// your fragment has focus 
} 

}