24

我有一个活动包含太多 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();
    }
}

但是在上面的示例中,消息显示在活动可见之前。

有没有办法找出活动是否完全可见?

4

5 回答 5

32

将您的代码移至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) 确定您的活动对用户可见(例如,恢复游戏)。

派生类必须调用该方法的超类实现。如果他们不这样做,将引发异常。

于 2013-10-11T07:06:00.607 回答
9

将代码移至 onAttachedToWindow()

@Override
public void onAttachedToWindow() {
   super.onAttachedToWindow();
   Toast.makeText(this, "Hi UI is fully loaded", Toast.LENGTH_SHORT).show();
}
于 2013-10-11T07:15:44.603 回答
6

将代码移至onResume.

每次您的活动进入前台时系统都会调用此方法,包括首次创建活动时。阅读暂停和恢复活动的详细信息

@Override
protected void onResume() {
    super.onResume();

    MyMethod();
}

在 Android 活动生命周期中阅读更多信息- 所有这些方法的用途是什么?

于 2013-10-11T07:05:13.463 回答
3

没有真正的回调,它被调用,恰好在那个时候活动是可见的。但正如您在附图中看到的那样,该方法onResume()只是在 Activity 应该可见时调用。

还可以在此处查看活动生命周期和文档

所以你的方法应该这样调用:

@Override
public void onResume() {
    super.onResume();
     MyMethod();
}

图安卓

于 2013-10-11T07:08:29.807 回答
2

调用活动MyMethod()_onResume()

onResume()当活动开始与用户交互时,根据文档调用。此时,您的活动位于活动堆栈的顶部,用户输入将转到它。

protected void onResume() {
   super.onResume();
   MyMethod();
}
于 2013-10-11T07:06:13.103 回答