我曾多次在onCreate()
上编写代码时出现问题。主要是因为UI
尚未在屏幕上进行调整和布局(即使我将代码放在函数的末尾)。我已查看activity life-cycle
以查看是否有onCreate()
之后的任何内容。有onStart()
,但问题是onRestart() recalls onStart()
,我不想要那样。那么is there a way to write code between onCreate() and onStart()?
或者我应该在哪里编写在放置UI
之后运行的代码,并且只在其process
期间运行一次?
答案 0 :(得分:1)
不确定你到底需要什么,但你可以"作弊"并简单地存储您是否运行代码:
private boolean mInit = false;
void onStart() {
if (!mInit) {
mInit = true;
// do one time init
}
// remaining regular onStart code
}
放置UI时运行代码的另一种方法是使用全局布局侦听器:
public class FooActivity extends Activity implements ViewTreeObserver.OnGlobalLayoutListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_content);
View content = findViewById(android.R.id.content);
content.getViewTreeObserver().addOnGlobalLayoutListener(this);
}
@Override
public void onGlobalLayout() {
// unregister directly, just interested once.
View content = findViewById(android.R.id.content);
content.getViewTreeObserver().removeOnGlobalLayoutListener(this);
// do things here.
}
}