Android - 当 activity.setContentView 完成渲染时是否会触发任何事件?

8

我试图在我的活动准备好后从myImageView.getImageMatrix()方法中获取值。

我尝试使用onCreate()onStart()onResume()方法,但是我得到的矩阵是默认值。

如果我通过OnClickListener触发调用myImageView.getImageMatrix(),在我的活动可见后,我得到正确的值。


为了更清晰明了:

  • 调用getImageMatrix onStart = Matrix{[1.0, 0.0, 0.0][0.0, 1.0, 0.0][0.0, 0.0, 1.0]}

  • 调用getImageMatrix onClick = Matrix{[0.77488154, 0.0, 7.6717987][0.0, 0.77488154, 0.0][0.0, 0.0, 1.0]}


问题在于布局直到onResume()完成后才被测量和渲染。请查看此问题以了解如何在此发生时获得通知:https://dev59.com/8FzUa4cB1Zd3GeqP0i1H - Flo
谢谢,onWindowFocusChanged在数据到达后会被调用,但它会在每次焦点改变时被调用。我可以添加一个标志来指示初始状态,但这似乎不太顺畅。我认为这是我的解决方案,有什么想法吗? - Shlomi Schwartz
4个回答

18

你也可以尝试这种方法:

ImageView myImageView = (ImageView) findViewById(R.id.myImageView);
ViewTreeObserver vto = myImageView.getViewTreeObserver();      
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {          
     @Override          
     public void onGlobalLayout() {              
        // do something now when the object is loaded 
        // e.g. find the real size of it etc          
        myImageView.getViewTreeObserver().removeGlobalOnLayoutListener(this);        
     }      
});  

removeGlobalOnLayoutListener()现在已经被弃用,从SDK版本16(Jelly Bean)开始,应该使用removeOnGlobalLayoutListener()。 - flo

4

我不是100%确定,但我需要了解类似的东西来帮助我的开发,我发现 onWindowFocusChanged() 在视图加载时被调用。我不确定这是否符合您的需求。


谢谢,onWindowFocusChanged在数据到达后会被调用一次,但它会在每次焦点改变时被调用。我可以添加一个标志来指示初始状态,但这似乎不太顺畅。我认为这是我的解决方案,有什么想法吗? - Shlomi Schwartz
哦,对不起,我忘记添加了。我有一个全局布尔变量,用于确保它是焦点更改的第一次调用,然后执行我需要做的操作。我想这取决于你需要做什么,但如果你只需要在屏幕加载时第一次访问某些内容,那么全局变量应该可以解决问题,尽管不是最优雅的代码。 - MikeIsrael
抱歉,我认为两个答案都很好,我希望能够同时选择它们(我可以这样做吗?)。但是我认为另一个解决方案更加顺畅。无论如何,我非常感谢你的回答! - Shlomi Schwartz
不,我没有注意到你已经有了另一个被接受的答案。我认为最好是你接受你实现的那个答案,如果另一个答案对你有用,那就应该接受它。只是担心我的答案有问题,如果有的话,也想为自己的代码知道 :) - MikeIsrael

1

不确定,无论如何,为了使用这个类,应用程序必须指定API级别为“11”或更高。但遗憾的是这不是我的情况。 - Shlomi Schwartz

0
也许您可以使用AsyncTask(http://developer.android.com/reference/android/os/AsyncTask.html),该任务可以监视ImageView是否已加载(可能不等于null)。
您可以在onProgressUpdate中显示进度对话框,然后从onPostExecute继续执行您的代码。

谢谢,对于看起来是微不足道的任务来说,听起来有点复杂。“当视图准备就绪时通知”。 - Shlomi Schwartz

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