为什么java类字段(和事件处理程序字段)不会在android对话框和自定义视图中初始化?

为什么java类字段(和事件处理程序字段)不会在android对话框和自定义视图中初始化?,java,android,field,android-custom-view,android-dialog,Java,Android,Field,Android Custom View,Android Dialog,我用java在android中创建了很多对话框,如下所示: public class MyComponent extends LinearLayout { // constructors that will call InitializeComponent after inflate layout private View.OnClickListener PersistButton_OnClickListener = new View.OnClickListener() {

我用java在android中创建了很多对话框,如下所示:

public class MyComponent extends LinearLayout {

   // constructors that will call InitializeComponent after inflate layout

    private View.OnClickListener PersistButton_OnClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            PersistRest();
        }
    };

    private void PersistRest() {
        int selectedIndex = RestTimePicker().getValue() - 1;
        long selectedTimeSpan = predefinedDurationValues[selectedIndex];
        SecretaryManagerUtility.RegisterRestByDuration("", SecretaryManagerUtility.Me(), System.currentTimeMillis(), selectedTimeSpan);
    }

    @Override
    protected void InitializeComponents() {    
        PersistButton().setOnClickListener(PersistButton_OnClickListener);
        super.InitializeComponents();
    }


    private Button m_PersistButton;

    protected Button PersistButton(){
        if(m_PersistButton == null)
            m_PersistButton = (Button)rootView.findViewById(R.id.PersistButton);
        return m_PersistButton; 
    }
}
问题是方法
PersistButton\u OnClickListener。单击按钮
PersistButton

但如果我将onClick赋值更改为以下代码,则一切正常:

    PersistButton().setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            PersistRest();
        }
    });
为什么??
此问题仅在android对话框和android自定义视图中出现

我找到了答案,但为错误的问题向我道歉。InitializeLayout()方法将在构造函数中调用(我使用自定义工具从xml生成视图对象)


问题是java字段在调用super()构造函数之前不会初始化,然后,在调用InitializeLayout()时字段为null。我找到了答案,但对于错误的问题向我道歉。InitializeLayout()方法将在构造函数中调用(我使用自定义工具从xml生成视图对象)


问题是java字段在调用super()构造函数之前不会初始化,然后,在调用InitializeLayout()时字段为空。仅供参考:java中的Pascal大小写使读取代码更加困难。请考虑使用java约定。java中的Pascal外壳使您的代码读起来更加困难。请考虑遵守java约定。