Android:在活动中启动/创建布局之前,如何执行方法



我需要在活动中启动布局之前执行一种方法。如果我调用该方法需要在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);
}

最新更新