我用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
后从未调用方法PersistButton_OnClickListener.onClick
但是如果我将 onClick 分配更改为下面的代码,则一切正常:
PersistButton().setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
PersistRest();
}
});
为什么?
此问题仅发生在android对话框和android自定义 View 中
最佳答案
我找到了答案,但对错误的问题表示歉意。 InitializeLayout() 方法将在构造函数中调用(我使用自定义工具从 xml 生成 View 对象)
问题是java字段在调用super()构造函数之前不会初始化,然后,当调用InitializeLayout()时字段为空
关于java - 为什么java类字段(和事件处理程序字段)不会在android对话框和自定义 View 中初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45390808/