我的活动包含太多的UI控件。我想在使活动可见后执行一个方法。
我试过的一个例子:
public class Main extends Activity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MyMethod();
}
private void MyMethod(){
Toast.makeText(this, "Hi UI is fully loaded", Toast.LENGTH_SHORT).show();
}
}
但是在上面的示例中,消息显示在活动可见之前。
如果活动完全可见,有没有办法找出?
答案 0 :(得分:26)
将代码移至onResume
@Override
protected void onResume()
{
super.onResume();
MyMethod();
}
检查活动生命周期
http://developer.android.com/reference/android/app/Activity.html
protected void onResume ()
在onRestoreInstanceState(Bundle),onRestart()或onPause()之后调用,以使您的活动开始与用户交互。这是开始制作动画,打开独家访问设备(如相机)等的好地方。
请记住,onResume不是您的活动对用户可见的最佳指标;诸如键盘锁之类的系统窗口可以在前面。使用onWindowFocusChanged(boolean)可以确定您的活动对用户可见(例如,恢复游戏)。
派生类必须调用超类的此方法的实现。如果他们不这样做,将抛出异常。
答案 1 :(得分:6)
将代码移至onResume
。
系统会在您的活动进入前台时调用此方法,包括第一次创建活动时。 阅读Pausing and Resuming an Activity的详细信息
@Override
protected void onResume() {
super.onResume();
MyMethod();
}
在Android activity life cycle - what are all these methods for?
了解详情答案 2 :(得分:4)
将代码移至onAttachedToWindow()
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
Toast.makeText(this, "Hi UI is fully loaded", Toast.LENGTH_SHORT).show();
}
答案 3 :(得分:3)
没有真正的回调,正好在那个时候,Activity是可见的。但是正如您在附图中看到的那样,只有当Activity应该可见时才调用方法onResume()
。
另请参阅活动生命周期和文档HERE
所以你的方法应该像这样调用:
@Override
public void onResume() {
super.onResume();
MyMethod();
}
答案 4 :(得分:2)
在活动MyMethod()
中致电onResume()
根据文档onResume()
在活动开始与用户交互时调用。此时,您的活动位于活动堆栈的顶部,用户输入将转到活动堆栈。
protected void onResume() {
super.onResume();
MyMethod();
}