我用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();
}
});
为什么? 此问题仅发生在安卓对话框和安卓自定义视图中
我找到了答案,但为不正确的问题道歉。InitializeLayout(( 方法将在构造函数中调用(我使用自定义工具从 xml 生成视图对象(
问题是Java字段在调用super((构造函数之前不会初始化,然后,当调用InitializeLayout((时,字段为空