我正在创建一个带有一系列用于其他活动的按钮的登录页面。 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方法尽可能整洁。
答案 0 :(得分:1)
您无法在onCreate
之前初始化视图,因为这是您的活动开始的地方。
在初始化活动之前,您无法初始化活动类中的某些内容。
因此,如果您想将初始化提取到方法中,只需在onCreate
内调用此方法:
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.layout);
initViews();
}
在活动开始时调用。这是大多数初始化应该去的地方:调用setContentView(int)来膨胀活动的UI,使用findViewById(int)与UI中的小部件进行编程交互