2014-11-26 2 views
1

Несколько раз у меня были проблемы с написанием кода на onCreate(). В основном потому, что UI еще не был размер и выложен на экране (даже если я поместил свой код в конце функции). Я просмотрел activity life-cycle, чтобы узнать, есть ли что-то, что работает после onCreate(). Существует onStart(), но проблема в том, что onRestart() recalls onStart(), я не хочу этого. Итак, is there a way to write code between onCreate() and onStart()? ИЛИ где я должен писать код, который запускается после того, как UI размещен и работает только один раз во время его process?Как написать код между onCreate и onStart?

+0

Какой код вы пытаетесь написать? Обычно в onCreate вы вызываете конструкторы для своих полей, а в onStart у вас есть некоторые методы запуска, если вам это нужно. – Barodapride

ответ

0

Не уверен, что именно вам нужно, но вы можете «обмануть» и просто хранить ли вы запускать код или нет:

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. 
    } 
} 
Смежные вопросы