Android的viewDidLoad和viewDidAppear等效方法

35

Android有没有类似于Cocoa的viewDidLoad和viewDidAppear函数的等效函数?

如果没有,那么我该如何在View出现时执行操作?我的应用程序是一个分栏应用程序,其中一个选项卡是论坛主题列表。我想每次View出现时刷新主题列表。在Android中是否可能实现这样的功能?


一个很好的老问题!这里可能会有帮助:https://dev59.com/HZzha4cB1Zd3GeqPKcy4#40789869 - Fattie
3个回答

24

Activity类有onCreate和onResume方法,它们与viewDidLoad和viewDidAppear非常相似。

Activity.onResume

编辑

补充一下,因为一些评论中提到这些回调期间视图树尚未完全可用,因此您可以监听ViewTreeObserver以获取对视图层次结构的最初访问。以下是如何使用ViewTreeObserver来实现此目的的示例。

    View someView = findViewById(R.id.someView);
    final ViewTreeObserver obs = someView.getViewTreeObserver();
    obs.addOnPreDrawListener(new OnPreDrawListener() {

        public boolean onPreDraw() {
            obs.removeOnPreDrawListener(this);
            doMyCustomLogic();
            return true;
        }
    });

1
onCreate不像viewDidLoad,因为在viewDidLoad中,所有来自xml/xib的视图都已创建并且可访问,但是在onCreate中,这些视图尚不可访问。 - Jonny
我发现在调用setContentView之后,可以在onCreate中使用findViewById - Jonny
2
@Rich,我认为更像是viewWillAppear,而不是viewDidAppear。onPreDraw的意思是准备绘图。 - LiangWang
2
@KuangYuang 我的意思是提到ViewTreeObserver并演示如何添加监听器。显然,任何在Google上找到这个问题的人都可以查看在线文档中的所有其他可用选项。但我认为,在大多数情况下,onPreDraw就足够了,因为这是在测量/布局过程之后,将允许您知道视图的尺寸,并仍然给您修改它并强制进行另一次测量/布局过程的选项。 - Rich

18

onResume() 更像是 viewCouldAppear :) public void onWindowFocusChanged(boolean) 是最接近 viewDidAppear 的方法。在此阶段,您可以查询视图的大小。


4

根据我有限的对Android的了解,您可以在ActivityonCreate方法中实现viewDidLoad类型的功能:

onCreate(Bundle)是您初始化活动的地方。最重要的是,在此处通常会使用定义UI的布局资源调用setContentView(int),并使用findViewById(int)检索需要以编程方式与之交互的UI中的小部件。

viewDidAppear的等效方法更接近于onResume方法:

在onRestoreInstanceState(Bundle)、onRestart()或onPause()之后调用,以便您的活动开始与用户进行交互。这是一个很好的地方开始动画,打开独占访问设备(如相机)等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接