如何在onCreate方法之外初始化我的RelativeLayoutButton?

时间:2019-04-13 19:59:36

标签: java android android-layout

我正在创建一个带有一系列用于其他活动的按钮的登录页面。 LandingActivity扩展了自定义BaseActivity。这些按钮具有自己的带有图像的RelativeLayout和带有LandingButton类的一些文本来处理它们。现在,只要我的按钮都在onCreate内声明和自定义,一切都可以正常工作。我想再进行一些划分。

我尝试过在onCreate之前声明它们,在我的initViews()方法中对其进行初始化,并像在任何标准视图中一样在onCreate中对其进行调用。

public class LandingActivity extends BaseActivity {

    LandingButton bMyData = new LandingButton(this, R.id.myDataButton);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_layout)
    //initViews();

这会导致NullPointerException,将我指向LandingButton.java

public LandingButton(Context context, int id)
{
    super(context);

    if (!(context instanceof Activity))
        return;

我还尝试过将LandingButton更改为引用BaseActivity而不是Activity:

    if (!(context instanceof BaseActivity))
        return;

相同错误。应用程序在遇到onCreate时在调试过程中崩溃,却没有给我太多帮助。

理想情况下,我想在onCreate之前声明我的LandingButtons,并在initViews()中对其进行编辑,以使onCreate方法尽可能整洁。

1 个答案:

答案 0 :(得分:1)

您无法在onCreate之前初始化视图,因为这是您的活动开始的地方。

在初始化活动之前,您无法初始化活动类中的某些内容。

因此,如果您想将初始化提取到方法中,只需在onCreate内调用此方法:

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);

    setContentView(R.layout.layout); 
    initViews();
}

来自documentation

  

在活动开始时调用。这是大多数初始化应该去的地方:调用setContentView(int)来膨胀活动的UI,使用findViewById(int)与UI中的小部件进行编程交互