我需要在活动中启动布局之前执行一种方法。如果我调用该方法需要在OnCreate()内部执行,是否在设置布局之前执行?
原因是因为我需要一种方法来返回布局中显示的信息,然后再启动它。会想对此做出一些反馈。
您可以在setContentView这样做的任何事情:
public class TestActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int i = 0;
setContentView(R.layout.main);
}
}
只要您不要与尚未夸大的视图互动
例如,这是一个错误:
public class TestActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ERROR, CAN'T TOUCH UI ELEMENTS
ImageView img = (ImageView)findViewById(R.id.img);
setContentView(R.layout.main);
}
}
使用Android Studio创建的默认活动包含以下代码
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Here is code, that executed before layout inflated
setContentView(R.layout.example_activity); //This line inflates layout
}
顺便说一句,您甚至可以删除setContentView
并充气布局编程。
在onCreate()
中进行,最好是在调用setContentView()
。
但是,如果您要接收的数据来自网络,则将在单独的Thread
上获得(因为在主Thread
上无法完成网络调用)。在这种情况下,布局几乎可以肯定会在获得数据之前显示。
一个解决方案是在启动Activity
之前获取数据,请在Intent
中以额外的方式传递,然后使用getIntent().getStringExtra()
onCreate()
中检索您可能正在用setContentView()
在Activity.onCreate()
中将布局夸大,因此您需要将函数调用以该方法拨打到setContentView()
。
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
yourFunctionCallHere();
setContentView(R.layout.act_main);
}