2017-07-29 47 views
1

我做了很多对话的android系统在Java象下面这样:为什么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_OnClickListener.onClick点击按钮PersistButton

,但如果我改变的onClick分配到下面的代码,一切正常后,从来没有所谓的:

PersistButton().setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      PersistRest(); 
     } 
    }); 

为什么? 这个问题只发生在android对话框和android自定义视图

+0

仅供参考:Java中的Pascal外壳使阅读代码变得更加困难。请考虑坚持Java约定。 – ChiefTwoPencils

回答

0

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

问题是java字段在调用super()构造函数之前不会初始化,然后当InitializeLayout )被称为

相关问题